【Perl】配列 $value の値をカンマ区切りでCSVファイルに書き込んで最後に改行し、 value 内の改行やカンマはうまく処理したいのですが、いくつか調べたものの結局どのスクリプトが良いのか分からなかったので教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:bonlife No.1

回答回数421ベストアンサー獲得回数75

ポイント40pt

http://www.hatena.ne.jp/1138373421#

人力検索はてな - 【Perl】配列 $value の値をカンマ区切りでCSVファイルに書き込んで最後に改行し、 value 内の改行やカンマはうまく処理したいのですが、いくつか調べたものの結局どのスク..

最終的なCSVはどうなっていれば良いのでしょう。

csvである以上、普通にカンマを含んでいては問題がありますよね。

EXCELのように値をダブルクォートで囲んでみてはいかがでしょうか。

(イメージと違っていたらスミマセン。)


#配列の定義

#カンマ、改行を含む値をセット

@value = (’AA’,’B,B’,’C

CC’);


#配列の値とカンマを順番に$csvdataに追記

#配列の値の前後にはダブルクォートをセット

while (@value){

$csvdata .= ’”’ . shift(@value) . ’”’ . ’,’;

}

#行末のカンマを改行に置換

$csvdata =~ s/,$/¥n/ ;

#csvファイルを開き、$csvdataの値を追記

open(OUTPUTFILE,”>>sample.csv”);

print OUTPUTFILE $csvdata;

close OUTPUTFILE;


出力結果のsample.csvをEXCELで開けば正しくセルにセットされます。

id:xiaotai

ありがとうございます! できたみたいです。

なのですが、EUC-jpで記述してしまっているので、sjis変換が必要そうです。調べてみます。

2006/01/28 01:49:17
  • id:ymlab
    漢字コードの変換なら

    J-codeが有名ですよ。

    ---readme引用
    JcodeConvert(文字列, 変換前の漢字コード, 変換後の漢字コード)
    で漢字コード変換されたあとの文字列を返します。
    - 変換前の漢字コードは次の0-4の数字で指定して下さい。
    0:AUTO DETECT(自動認識)
    1:EUC-JP
    2:Shift_JIS
    3:ISO-2022-JP(JIS)
    4:UTF-8
    - 変換後の漢字コードは次の1-4の数字で指定してください。
    1:EUC-JP
    2:Shift_JIS
    3:ISO-2022-JP(JIS)
    4:UTF-8
    - たとえば、
    <?php
    include(”./jcode.phps”);
    $string = ’てすと’;
    echo JcodeConvert($string, 1, 2);
    ?>
    で(ファイルがEUC-JPで書かれていれば)EUC-JPの文字列「てすと」が
    Shift_JISに変換されてブラウザに出力されます。
    http://www.spencernetwork.org/jcode/
  • id:mahbo
    値のリストから CSV形式に変換する

    値のリストから CSV形式に変換する
    http://www.din.or.jp/~ohzaki/perl.htm#CSVfromValues

    回答されていた物よりこちらの方が簡潔で良いと思いますね。
    > while (@value){
    > $csvdata .= ’”’ . shift(@value) . ’”’ . ’,’;
    > }
    > $csvdata =~ s/,$/¥n/ ;
    この箇所が
    > $line = join ’,’, map {(s/”/””/g or /[¥r¥n,]/) ? qq(”$_”) : $_} @values;
    この一行で済んでいます。
    また後者では値に二重引用符が含まれている場合にも対応していますし、出来上がったCSVファイルも、必要が無い二重引用符を使っていない分だけ小さくなります。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません