アプリ版:「スタンプのみでお礼する」機能のリリースについて

ファイル名:log.dat は以下の構造をしています。

"Key-01"|"参照"|"P2"|"yamada" (\n\r)←改行
"Key-02"|"書込"|"P5"|"minami" (\n\r)←改行
"Key-03"|"参照"|"P3"|"yamada" (\n\r)←改行

open(IN,"log.dat") || die "log.dat",": $!";
@log=<IN>;
close(IN);

で@logにデータを読み込んだ後、
foreach(@log){
$data = $_;
$data =~ s/ //g;
$data =~ s/\n//g;
$data =~ s/\r//g;
$data =~ s/"//g;
@second =split(/\|/ , $data); <---(1)

で配列@secondに格納するのですが、
この時、@secondを(\n\r)=改行で区切るように二次元配列にしたい
のです。

@second = (
[ Key-01 , 参照 , P2 , yamada ]
[ Key-02 , 書込 , P5 , minami ]
[ Key-03 , 参照 , P3 , yamada ] )

上記<---(1) の部分をどのように変更すればいいでしょうか。

A 回答 (2件)

split の結果を配列のリファレンスにしてやって、


@secondにpushすればいいです。

こんな感じで。
ところで改行は \r\n ではなくて \n\rなんですか?

use strict;
use warnings;

use Data::Dumper;

my @second;

open my $fh, '<', 'log.dat' or die "log.dat",": $!";
foreach my $line (<$fh>) {
#chomp $line;
$line =~ tr /" \n\r//d;
push @second, [split /[|]/, $line];
}
close $fh;

print Dumper @second;
    • good
    • 0
この回答へのお礼

どうも回答ありがとうございました。

お礼日時:2007/01/25 22:15

No.1でいいんですが、


File::Slurpをつかうとプログラムがすっきりします。
それと、Data::Dumpのほうか表示がすっきりしています。

#!Perl
use strict;
use File::Slurp;
use Data::Dump qw(dump);

my @log = read_file("log.dat");
my @second;
for (@log) {
chomp;
my @data = split /\|/;
s/(^"|"$)//g for @data;
push @second => \@data;
}

print dump(\@second);

__END__
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2007/01/25 22:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!