Hatena::ブログ(Diary)

Lazy Programmer :-p

 | 

2008-01-22

CSVとかTAB区切りファイルとかから、アレイハッシュを作るチップ


一行目がキーで、それ以降がデータのファイルを想定!

このコードがかっこいい。id:hideden に教えてもらった。 Thanks!

 @row{ @fields } = split("\t" , $line );

サンプル


use strict;
use warnings;
use Data::Dumper;

my $tab = "\t";
my $DATA =<<__TAB__;
id${tab}message${tab}status
1${tab}test1${tab}disable
2${tab}test2${tab}enable
3${tab}test3${tab}disable
__TAB__

my $is_first_line = 1;
my @fields = ();
my @data = split("\n" , $DATA );
my @nice_format_data = ();
for  my $line ( @data ) {
    chomp $line;

    if( $is_first_line ) {
        @fields = split("\t" , $line );
        $is_first_line=0;
    }

    # これ!。フィールドの配列のデータをハッシュにまとめて入れれる!
    my %row;
    @row{ @fields } = split("\t" , $line );
    push @nice_format_data , \%row ;

}

warn Dumper \@nice_format_data;

K2K2 2008/01/29 12:45 このコードの本質的な部分とはあまり関係ないですけど、
splitの第3引数を-1 (scalar @fieldsでもいい) にしないと、
途中のカラムと末尾のカラムで空の要素の扱いが変わって
(途中のカラムでは空文字列に、末尾ではundefに) ちょっとアレな感じですよ。

# splitの第3引数は-1デフォルトの方がいいのに〜

tomyherotomyhero 2008/01/29 22:21 おおおおおおお!

id${tab}message${tab}status${tab}${tab}

とした場合、扱いがちがうってことですね!!!!!!!!!

Thanks!!!!!!!!!!!!!!!

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/tomyhero/20080122/1200988441
 | 
Connection: close