- ベストアンサー
csvファイル改行コードの置換について
- csvファイル内の改行コードを置換してデータを出力するスクリプトについて
- csvファイル内の改行の数が多く、データの表示がうまくいかない場合の解決方法
- csvファイルで改行コード以後のデータを正しく表示するための置換方法
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
あ、一気に配列に読んでいるのですね。 でも同じ対処で行けると思います。 $/="\x0D\x0A"("\r\n"でも良いです)は、 > @DATA = <CSV>; この行より前までに入れておけば良いです。 また、@DATA=<CSV>より後に $/をデフォルトの値に戻すという意味で、 $/="\n"を入れておいた方が良いでしょう。 (本当はこういう時はlocalを使うものなのかも知れませんが)
その他の回答 (1)
- thatsthat
- ベストアンサー率55% (15/27)
状況が良く分からないのですが、 ファイルから一行ずつ読み込み(データ中に改行があるので1レコード分とは限らない) 改行文字を置換で削除 行末に\nを付けて出力 のような処理になっているのではないでしょうか。 これでは結局、データ中の改行は消えませんよね。 置換はその書き方で動作すると思うので、 入力、出力の仕方をどうやっているか、も書かれた方が良いと思います。 とりあえず、参考までに、 「1レコード」ずつ読み込む方法の例だけ書いておきます。 例えば、行末が"\r\n",データ中では"\n"の場合なら、 $/="\x0D\x0A"; で読み込めば、一レコードずつ取り出せます。 例えば、行末が"\n",データ中の改行も"\n"で、 データ中に改行がある時は"~"が付加され、データ中に"がある時は""に置き換えられている という条件であれば、 $/=""; $all=<>; @lines=($all=~/\G((?:".*?"|[^"])*?)\n/gs); $lines[0]が1レコード目、$lines[2]が2レコード目・・となります。
補足
データ読込み↓ sub CSV_DL { open(CSV, "<$csv") or &printErrorPage("取得失敗"); eval{ flock(CSV, 1) }; @DATA = <CSV>; close CSV; $douitu = 0; $name = 0; $name2 = 0; while ($name < @DATA) { (@AAA) = split(/\,/, @DATA[$name]); if ("@no[0]" eq "@AAA[0]") { $name2 = "$name"; } if ("@new_no[0]" eq "@AAA[0]") { $douitu=1; } $name++; } } データ出力↓ ($no,$name,$syousai,$end) = split(/\,/, @DATA[$name2]); $syousai =~ s/\*/\*/g; $syousai =~ s/\r\n//g; $syousai =~ s/\n//g; $syousai =~ s/\r//g; $syousai =~ s/\"</\</g; $syousai =~ s/\>\"/\>/g; $syousai =~ s/\""/\"/g; $syousai =~ s/\""""/\""/g; $syousaiにはhtmlタグが入っています。 上記の場合は下記はどこへ記述すればよろしいでしょうか? >例えば、行末が"\r\n",データ中では"\n"の場合なら、 >$/="\x0D\x0A"; >で読み込めば、一レコードずつ取り出せます。 ご教授お願いいたします。
お礼
ご回答いただき誠にありがとうございます。 正常に取り込みできました。 感謝いたします。