• ベストアンサー

perlでの改行コードの置換

noname#25358の回答

noname#25358
noname#25358
回答No.1

 これはですね。  バグなのかどうか知りませんが、一部のエスケープシーケンスは通常のスカラー変数に入っているときと $_ に入っているときとでは扱いが変わる(らしい)というのが原因です。  ですから、MS-DOS系改行コードである \r\a をUNIXの改行形式に治すには、  $_ = $line;  s/\r//g;  $line = $_;  とします。俺が作ったフリーソフトはこれで正常動作してます。

mune
質問者

補足

やってみたのですが、 s/\n/\r/g; でやるときちんと改行(CR+LF)が\r(CR)に変換されるのですが、 目的の\r(CR)だけを取り除く s/\r//g; としても改行(CR+LF)の\r(CR)が引っかかりませんでした・・・ 他の方法なにかありますでしょうか。

関連するQ&A

  • ファイル出力の改行コードを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
  • csvファイル改行コードの置換について

    お世話になります。 csvファイルで作成したデータを出力表示させるスクリプトで csvファイル内の改行コード(セル内)以後のデータが出力できません。 下記の置換で改行コード以後のデータが表示されません。 $abc =~ s/\r\n//g; $abc =~ s/\n//g; $abc =~ s/\r//g; csvファイル内の改行の数が多く、1行のデータが改行の為に、2行になったりしているので出力前に置換し表示させる方法です。 csvファイル作成時につく""は正常に置換しています。 似たような質問もあったのですが、少し違うようですので質問いたしました。 何卒、ご教授お願いいたします。

    • ベストアンサー
    • Perl
  • Perlでの改行コードについて

    <textarea>に入力された値をPOSTで渡し、ポスグレに書き込み、それをHTML上で表示する処理をしているのですが。 textareaで改行を入力した場合に、 DB内に改行が登録されません。 例: *textareaのwrapはsoftに設定してあります。 あいうえおかきくけこ さしすせそ と入力すると。 DBには 「あいうえおかきくけこ さしすせそ」 と登録され 表示では「あいうえおかきくけこさしすせそ」と表示されます。 ソースでみると 「あいうえおかきくけこ さしすせそ」と表示されています。 改行コードの置換がされていないのだと思い INSERT前に s/\r\n/<BR>/g; s/\r/<BR>/g; s/\n/<BR>/g; を使い置換をすると DBには何も登録されません。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 【正規表現】【javascript】CR、CR・LF、LF改行コードをLFにしたい

    CR、CR+LF、LFのシステムによって異なる3種類の改行コードを LFに置換したいです。 変数hogeに置換対象の文字列が入っているとして、 hoge.replace(/\r\n/g,"\n").replace(/\r|\n/g,"\n"); とreplaceを使って置換してみました。 うまくいってるようですが、replaceを二度使ってるところが、カッコ悪いなぁと思います。 replace一回ですむような方法がありましたら教えてください。

  • CGIで改行タグを改行コードに変換ってできますか?

    CGIで改行タグを改行コードに変換ってできますか? $text =~ s/\r\n/<br>/g; $text =~ s/\r/<br>/g; $text =~ s/\n/<br>/g; で確認画面上で表示されるtextareaの文章は改行されるのですが、 届いたメールには<br>と表示されてしまって困ってます。 PHPでは変換できるみたいなのですが、perlでも出来るのでしょうか?

    • ベストアンサー
    • CGI
  • ”ァー”が含まれている文字を置換すると文字化け

    OS:solaris8 perlのver:5.8.6 perlで、”ァー”が含まれている文字列に対し、 全角スペースを半角スペースに置換しようとすると 文字化けしてしまいます。 (”ぁー”でもどうようでした) ”ぃー”や”ぅー”、”ぁ”では 問題無いのですが…。 当方、perl初心者&文字コードに詳しくないため、 原因がよくわからないでいます。 どなたか原因をおわかりの方、 ご教授お願いいたします。 文字コードはEUCです。 以下はソースです my $line = "ファイヴァー スコープ 眼鏡"; $line =~ s/\t/ /g; # タブを半角スペースに置換する print '$line2='.$line."<br>\n"; $line =~ s/ / /g; # 全角スペースを半角スペースに置換する print '$line3='.$line."<br>\n"; #↑ここで文字化けしてしまいます $line =~ s/^\s+//; # 頭の空白を除く print '$line4='.$line."<br>\n"; $line =~ s/\s+$//; # 尻の空白を除く print '$line5='.$line."<br>\n";

    • ベストアンサー
    • Perl
  • 改行コードについて

    HTMLフォームのテキストエリアで改行した場合の処理についてご質問します。 Windowsのローカル環境で試しています。 改行コードLFでPHPを作成しています。 ○改行コードの認識 LF(\n) Unix,Mac OS X CR(\r) Mac OS 9 CRLF(\r\n) ○テキストエリアからの入力値の処理 CRLF、CRをLFに変換しています。 $value= str_replace ("\r\n", "\n", $value); $value = str_replace ("\r", "\n", $value); このあとDBに値を格納しています。 ○出力の際の処理 DBから値を取得。 phpのprint関数で下記を出力。 <textarea >${value}</textarea> 上記処理で、ローカル、サーバともに正常に動作しています。 しかし改行コードがLF(\n)なのでCRLF(\r\n)のWindowsで表示したときには問題が起きそうな気がします(実際には正常に動作)。 なにかしっくりこなくて質問させていただきました。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • VB6のテキスト処理 さまざまな文字コード/改行で対応

    VB6のテキスト処理で、Open InputとLine inputを使った場合に 文字コード/改行コードが SJIS/CRLFの時は正しく1行を読み込む事ができますが、改行がLFの時は正しく1行を読み取りません。 改行コードがLFもしくはCRの場合でも正しく1行を読み取る方法はあるのでしょうか? また、文字コードに関してもEUCやUTF-8,JISでも対応できる方法がありましたら教えて下さい。

  • Windowsでの改行コード

    HTMLを書くのにあたりUNIXサーバが主流なのだから、 UTF-8、改行コードはLFで行うことを勧められました。 Windowsの改行コードはCR LFだそうですが、 LFにした場合、Windows上でJAVAScriptなどのテストをしたときに 何か不都合があるのでしょうか。 改行コードが CR LF でUNIX上でトラブルになった事例は見つけました。 反対のことが良く分かっていません。よろしくお願いします。

  • UNIXでの改行コードの置換

    2バイト改行コードが入ってるデータを1バイト改行に置換してから、 コボルにて入力ファイルとして扱いたいのですが、 UNIXのコマンドで、置換することは可能でしょうか? ちなみにファイルは可変長です。 どなたかご存知の方がいられましたら、ご教授頂けます様よろしくお願い致します。