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

入力ファイルに
A1, A2, A3, A4...
B1, B2, B3, B4...

というように記述されており、
そのファイルを処理した結果
A1
B1

A2
B2

A3
B3

のようになるように処理したいです。

どのようにすれば実現できるでしょうか?

二次元配列が使用できれば、
入力ファイル情報を配列に保持できると思いますし、

入力ファイルを複数回読めれば、
そのたびに、読む列を変更できるのですが。。

Perl初心者ですが、よろしくお願いします

A 回答 (2件)

Perlはリストの処理の関数が


デフォルトだと少ないんですよねえ

ということで,こんな関数をでっちあげました.
zip
引数 二つの配列のリファレンス
返値 一つの配列のリファレンス
動作例
zip ([1,2,3], [a,b,c]) -> [[1,a],[2,b],[3,c]]
zip ([1,2,3,4], [a,b,c]) -> [[1,a],[2,b],[3,c]]
zip ([1,2,3], [a,b,c,d]) -> [[1,a],[2,b],[3,c]]
引数の配列リファレンスのうち,短いほうに合わせて
中身を``zip''します(ジッパーで閉めます).
#ぶっちゃけた話Haskell/Schemeあたりにある
#zipの劣化コピー(^^;
##配列が空であるかどうかの判定が気に入らない

use strict;
use warnings;

sub zip{
my $a = shift;
my $b = shift;
my @temparray;
unless ((scalar @{$a}) * (scalar @{$b}) == 0){
push @temparray, [shift @{$a}, shift @{$b}];
push @temparray, @{zip($a, $b)};
return \@temparray;
}else{
return [];
}
}

my @list;

foreach (<DATA>){
chomp;
push @list, [split /,\s*/];
}

foreach (@{zip($list[0],$list[1])}){
print $_->[0],"\n";
print $_->[1],"\n";
}


__DATA__
A1, A2, A3, A4
B1, B2, B3, B4
    • good
    • 0

同じファイルを複数回読むのは、close してから再度 open すればできませんか?


一つ目の質問も二次元配列、というか配列の配列が使えます。

詳しくはこの辺をどうぞ
perllol - Perl で配列の配列を操作する
http://perldoc.jp/docs/perl/5.6.1/perllol.pod

処理した結果というのは、全部をひとつのファイルに吐き出すのですか?
それとも列ごとに別のファイルですか?

use strict;
use warnings;

use feature ':5.10';
my @data;

foreach my $line (<DATA>) {
chomp $line;
push @data, [split q{,}, $line];
}

foreach my $i (0 .. scalar @{$data[0]} - 1) {
foreach my $j (0 .. scalar @data - 1) {
say $data[$j][$i]
}
}

__END__
A1, A2, A3, A4
B1, B2, B3, B4

実行結果:
A1
B1
A2
B2
A3
B3
A4
B4

余計な空白等はまあ適当に。
    • good
    • 0

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