• ベストアンサー

改行コード変換…

今、ソケットを用いたメール送信プログラムを作成していて、以下のページを 参考にプログラムを組んでいるのですが、次の意味が分かりません。 どなたかご存知の方がいらっしゃいましたら教えて頂きたいのですが。 # -------------------- # 改行コード変換 # -------------------- sub decode{ my $inf = $_[0]; $$inf =~ s/\x0D\x0A|\x0D|\x0A/\n/g; #←特にこの行が } 『Knave Web講座』"http://www.site-cooler.com/kwl/perl/smtp.htm#perl"より

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

コンピュータで使われている改行コードは、 \x0D \x0A (windows系) \x0A (Linux系) \x0D (Macintosh系) の3種類があります。 これを一括して論理的な改行記号"\n"に置き換える部分が 件の行です。 その行の元になっている解説はこちらです↓ 私の説明より分かりやすく書かれています。

参考URL:
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
mintea86
質問者

お礼

素早い回答ありがとうございました。 解決しました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • jikenjp
  • ベストアンサー率38% (5/13)
回答No.4

それがし、"perl" ど素人のため、良くしりませぬー。ごめんね。 16進の改行表現、今知りました。馴染のある オクタル表現で、すこし遊んでみました。(私のマシン "Linux" のため、元は "LF" だす) #!/usr/bin/perl while(<>){ $_ =~ s/\012/\015/g; #LF(ラインフィード) を C/R に変更 if($_ =~s/\015\012//g){ #Windows だったら print $_, " C/R + LF\n"; } elsif($_ =~ s/\012//g){ #Linux/UNIX だったら print $_, " LF だけ\n"; } elsif($_ =~ s/\015//g){ #Mac だったら print $_, " C/R だけ\n"; } } つまらなすぎて、ごめんね!?

mintea86
質問者

お礼

素早い回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • investyou
  • ベストアンサー率23% (13/56)
回答No.3

改行コード変換はたぶんperl内部における文字コード変換なんかの過程でしょう。 後は蛇足と言うか参考までに。 >今、ソケットを用いたメール送信プログラムを作成していて、 ソケットを使用しなければいけませんか? メール送受信なら用意されたperlモジュールをオススメします。 http://homepage3.nifty.com/hippo2000/perltips/perlmail.htm ソケット生成して、順番待ちして・・などとやるよりは簡単ですからね。。 kentwebさんの方が詳しいですが、ソケットならこっちも参考になりますよ。 http://www.7key.jp/program/perl/study2.html

mintea86
質問者

お礼

素早い回答ありがとうございました。 参考になりました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

 CRLF または、CR または LF が対象文字列にあったら、 \n に変換しているでは。    下記参考です。  http://seclan.dll.jp/cccrlf.htm  

参考URL:
http://seclan.dll.jp/cccrlf.htm
mintea86
質問者

お礼

素早い回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 改行コードの変換

    TEXTAREAタグの属性wrapにhardを設定したHTMLがあります。 今まで問題はなかったのですが、Window8のIE10だと、なぜか 改行が倍になってしまいます。 調べた所、IE10の特有の問題で、改行が本来「0x0d,0x0a」に したいところ、「0x0a,0x0a」になってしまうようです。 http://answers.microsoft.com/ja-jp/ie/forum/ie10-windows_8/%E5%86%8Die10-textarea/6ee92b5a-46dd-498d-83d8-eede6ec69864 そこで、データ受け側のPHPプログラムで、改行コードを0x0a,0x0aから0x0d,0x0a にしたいと思っていますが、改行コードの変換の仕方がわかりません。 replaseとかだと、\nとか\r\nとかでしか変換した事がないので、0x0aとかの変換 の仕方がわかりません。 また、単純に0x0a,0x0aを0x0d,0x0aに変換すれば解決できるものなのかも疑問です。 本当に改行が複数あった場合などは、どうなるのか? IE10以外のブラウザでは問題ないのか?です。 WindowsのPCはあるので、Windows版のIE10以外のIEやクローム、FireFox、サファリ などは試せますが、マックなどはどういった挙動をするのかも心配です。 ここら辺に詳しい方がおりましたら、アドバイスを頂けると助かります。宜しくお願いします。

    • ベストアンサー
    • PHP
  • UTF-32における改行コードって

    表題の通りです。 UTF-32の改行コードってなんなんでしょうか。 UTF-16の場合「0x0d0x000x0a0x00」 UTF-8の場合「0x0d0x0a」 ですよね? UTF-32の場合「0x0d0x000x0a0x000x000x00」? お分かりの方教えてください。m()m

  • htmlファイルの改行について

    複数ある html ページから、改行部分( <BR> ではなくて )、を自動的に削除して再び保存する、というプログラムを自作しているのですが、\r\n, \r, \n に当てはまらない改行コード? があるみたいで、完全に取りきれないのです。 $input =~ s/\n\r//g; $input =~ s/\n//g; $input =~ s/\r//g; もしくは、 $input =~ s/\x0D\x0A|\x0D|\x0A//g; という具合にしているのですが、予想では、数行にわたるhtml タグから全ての改行が取り除かれ、一行にまとまると いうイメージがあるですが、ところどころ改行が残ります。何がいけないのでしょうか・・・

    • ベストアンサー
    • Perl
  • ファイル出力の改行コードをLFに

    また質問です。よろしくお願いいたします。 WindowsXPでperl5.8.7の環境です。 出力したファイルの文字コードをEUC、改行コードをLFで出力をしようとしています。 なお入力、出力ファイルには日本語が含まれています。 文字コードは希望通りいくのですが改行コードがうまくいきません。 Windowsのデフォルト改行コードCR+LFが出力されてしまいます。 (Terapad(エディタ)の改行コード表示がこうなっています。) (1)binmode(OUT);で行うと、 Wide character in print at jisyo01.pl line 63, <IN> line 97. というエラーが表示され、出力されない。 (2)$xxx[$i] =~ s/\x0D\x0A/\x0A/g; で改行コードを置換しようとしても、置換されず、 CR+LFである。 (3)$/ = pack("C", hex("A"));で 改行コードをchompした後、print OUT "$/";としても、 CR+LFのままである。 上手くいきません。いい方法ないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • perlでの改行コードの置換

    perlで改行コードを置換したいのですが・・・ もとのファイルはS-JISコードでその中身をEUC(UNIXで使用するために)に変換します。ここまではOKなのですが、改行コードがうまく行きません。 改行コードをUNIXで使うためにLFだけにしようと思い、 $line =~ s/\r\n/\n/g; (これは\r\nで引っかからない) とか $line =~ s/\n/\x0A/g; とかにしてみたのですがうまく行きません。 どのようにすればよろしいでしょうか?

    • ベストアンサー
    • Perl
  • jsp 改行コードで改行させて表示したい

    はじめまして。 PostgreSQLから読み込んだ文字列データを表示させるtomcat+struts+servlet/jspを作成中です。 データの文字列に含まれる改行が、クライアントに表示された際に反映されず困っています。 過去ログも調べ、近い質問はありましたが、僕とは内容が微妙に違うようで、改めて質問させていただきました。 例えば、あるテーブルのある項目に、 A B C というデータ(A,Bそれぞれの後に改行のある3行の文字列)があるとします。 これを読み込みaction form bean(と言うのですか?setter/getterを定義する関数です)を介してjspに埋め込むと、できあがるhtmlでは、 ABC と改行されずに表示されます。 htmlで改行させるには「<BR>」が必要なのかと、データ文字列に0x0dや0x0a、または0x0d+0x0aがあれば「<BR>」に置き換えてaction form bean(?)のsetterに渡してjspを作ると、今度は、 A<BR>B<BR>C と「<BR>」が文字列として表示されます。 htmlをソース表示すると、「A&lt;BR&gt;B&lt;BR&gt;C」で、親切にも「<」「>」をそれぞれ「&lt;」「&gt;」に勝手に置き換えあくまで文字列として表示してくれるようです。 試しに改行コードを「&lt;BR&gt;」に置き換えても予想通りその部分は &lt;BR&gt; とそのまま表示され、そのソースは「&amp;lt;BR&amp;gt;」でした。 「<」や「&lt;」等をそれぞれ「&lt;」「&amp;lt;」のように置き換える作業は、どこが行っているのでしょうか。 また、改行位置で改行させるにはどうすればよろしいでしょう。 OSはwindowsXPです。 無知ゆえに、つまらないことで悪戦苦闘しているのかも知れませんが、経験も浅くてよく解りません。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • VBA改行について

    Sub 改行() MsgBox "a" & vbCr & "i" MsgBox "a" & Chr(13) & "i" MsgBox "a" & vbLf & "i" MsgBox "a" & Chr(10) & "i" MsgBox "a" & vbCrLf & "i" MsgBox "a" & vbNewLine & "i" MsgBox "a" & Chr(13) + Chr(10) & "i" End Sub 上記のコードを実行すると、すべて改行できますが、 どれが正しい、一般的な改行のコードなのでしょうか? どれも正解だとは思いますが、 企業でプログラムを作る際、 どの改行のコードを使うのか知りたいです。 よろしくお願い致します。

  • 取込データの改行を正しくしたい。

    SQLServerで外部のデータをインポートしたのですが そのデータの改行部分がSQLServerでは・で表示されています。 検索で調べてみて replace(列名,char(10),'') replace(列名,char(13),'') をやると・は消えるようになったのですが ・を消すのではなくSQLServerで使える改行文字に変更するには どの様にすればいいのでしょうか? 一応SQLServerのデータで改行文字を含んだ列を convert(binary,列名) を使用し改行文字を見たところ 0x0D000A00000.. となっており、0x0D000Aかなと思ってreplaceしたのですが うまく行きませんでした。

  • テキストファイルから改行コードを削除して読込む方法

    ExcelエクセルVBAマクロについてテキストファイルから改行コードを取り除いて 変数に読み込む方法について確認させてください。 下記のVBAログラムはWordファイルをテキストファイルに落としたファイルを変数aに 読み込んでいます。 このとき、読み込んだテキストファイルはWordファイルをテキストファイルに 落とし込んだファイルなので改行コードが残ってしまいます。 この改行コードを削除したうえで変数aに読み込みたいのですが可能でしょうか。 改行コードはメモ帳では「↓」と下矢印に似た文字で表示されます。 (実際には下矢印ではないようです。) 今のところ、Replace関数で改行コードを削除するプログラムを 考えているのですが、改行コードのVBAでの表現方法が分からないので 先に進むことが出来ません。いい案があればぜひご教授下さい。 あるいはほかの方法でも改行コードが削除出来れば結構です。 またこの変数aに読み込んである文字列からかぎカッコの内部にある文字を 抽出してエクセルの行方向に出力する方法があればご教授頂ければ幸いです。 例えば “あなたは「こんにちは」と言いました。 私は「元気ですか」と聞きました。” が文字列aに読み込んである場合、“こんにちは”、“元気ですか”を抽出して エクセルに順に出力という方法です。 色々と書きましたが、よろしくお願いいたします。 以下、VBAプログラム本文です。 ---------------------------------- Sub sample1() Dim a As String a = CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream.Readall CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream.Close End Sub

  • Perl 禁止語句

    テキストの中に禁止語句一覧があります。 それと一致した場合、エラーを返すのですが、 現在のコードですと、 完全一致で、これを部分一致にする 方法を教えてください。 またコードの指摘があればよろしくお願いいたします! ◆ngword.txt◆ あい いう うえ えお ・ ・ ・ 1000行ほど(もっとあるかもしれません) ◆test.pl◆「UTF-8」 #/usr/bin/perl use Encode; my $Name = "え"; $Name = encode('cp932', decode('UTF-8', $Name)); open my $fh, '<', 'ngword.txt'; chomp(@ngword = <$fh>); if(&ban($Name, \@ngword)) { print "error\n"; } sub ban { my $body = shift; my $word = shift; $body =~ s/(\x0d\x0a|\x0a|\x0d|\n|\s|\x81\x41|\xff)//g; return map { $body =~ /$_/m } @$word; }

    • ベストアンサー
    • Perl