2009-09-18 31 views

答えて

24

Class:CSVを使用できます。

use Class::CSV; 

my $csv = Class::CSV->new(
    fields   => [qw/userid username/] 
); 

$csv->add_line([2063, 'testuser']); 
$csv->add_line({ 
    userid => 2064, 
    username => 'testuser2' 
}); 

$csv->print(); 

# 2063,testuser 
# 2064,testuser2 

編集:複数のライブラリのために、あなたはsearch CPANをすることができます。

17

我々は通常使用(上記Class::CSVをに基づいています)Text::CSV_XS

UPDATE:以下もコメント提出はText::CSV_PPに頼る、それが接続可ではない場合、Text::CSV_XSをアップロードしたりれるText::CSVを使用することをお勧めしていますXS依存関係がなく、インストールが簡単です。

+6

これは最適なオプションです。 Text :: CSV_XSは高度に最適化され、滑らかなAPIを備えています。私たちはそれを全部使います。著者は私の目にもCPANのすべてに最も敏感です。彼はモジュールを誇りにし、一流のサポートを提供します。 Text :: CSV_PPは_XSのためにコンパイルできない場合にも素晴らしいフォールバックです。 Text:CSV –

+2

最後の文との合意:Text :: CSVを使用するだけでText :: CSV_XSが読み込まれます(使用可能な場合)。またはText :: CSV_PPに戻った場合システムにはXSバージョンがインストールされていません。 –

+1

@szabgab答えにText :: CSVを使用してCSVを作成する例を教えてください。私はドキュメントを読んでおり、CSVの解析に非常に重点を置いています。作成方法についてはあまり明確ではありません。 –

9

複数の方法があります。

  • DBD::CSV - CSVファイルの読み書きにSQLを使用します。
  • Text::CSV - 一度に1行ずつCSVファイルをビルドして解析します。これは、CSV操作の金本位制です。
  • POE::Filter::CSV - POEコンポーネントIOにCSVフィルタを提供します。
  • Data::Tabular::Dumper::CSV - テーブルをCSVファイルに直接ダンプします(同じインターフェイスを持つオブジェクトはXMLまたはMS Excelファイルにダンプできます)。

CPANには他にも多くのものがあります。もちろん

、あなたはこのすべてを無視して、ループを使用し、参加して印刷できます。

my @table = (
    [ 'a', 'b', 'c'], 
    [ 1, 2, 3 ], 
    [ 2, 4, 6 ], 
); 

for my $row (@table) { 
    print join(',', @$row), "\n"; 
} 

ちょうどあなたのスクリプトを実行し、出力をファイルにリダイレクトし、強打!あなたは終わった。または、ファイルハンドルにopenを狂わせてファイルに直接印刷することもできます。

しかし、このようなデータ処理タスクでは、複数行のフィールドや埋め込みコンマ、その他多くの奇妙なものが表示されることはありません。だからこのアプローチには注意してください。

私の勧告は:

  • あなたはPOE アプリケーションを構築する場合、POE ::フィルターを使用しています。
  • SQLでSQL/DBIモンスターで夢を見ている人、またはCSV の出力を実際のデータベース 接続で置き換える必要がある場合は、DBD :: SQLを使用してください。 、ダイジェストプリントを使用して参加する
  • スプレッドシートのためのいくつかのデータを 単純なデータを持っていると 形式に汚い少し使い捨てスクリプト一緒 をcobblingしている場合 - の予想寿命となしのコードのためにこれを行います2時間以上。
  • CSVまたはXMLにデータの塊をダンプしたい場合は、 Data :: Tabular :: Dumper :: CSVを使用します。
  • 安定性と保守性が高く、入力と出力を最大限に制御する必要がある場合は、Text :: CSVを使用します。 (POE :: Filter :: CSV、Data :: Tabular :: Dumper :: CSV、およびDBD :: CSVはすべて、バックエンド処理としてText :: CSVまたはText :: CSV_XSを使用します)。
関連する問題