私は別々のCSVファイルに分割したいいくつかの列と行(それぞれ6000個の奇数行と+60個の列)各ファイルは、最初の列の最初の行に表示される文字列と命名されるべきである与えられた文字列(文字列の間の線の数が異なる)で...例えば:Perl:指定された文字列でCSVを分割し、特定の文字列をファイル名として使用
Peter B1 C1 D1
A2 B2 C2 D2
A3 B3 C3 D3
END B4 C4 D4
Jack B5 C5 D5
A6 B6 C6 D6
A7 B7 C7 D7
END B8 C8 D8
Billy B9 C9 D9
A10 B10 C10 D10
A11 B11 C11 D11
END B12 C12 D12
SO 3が存在すべきですピーター、ジャック、ビリーという名前のファイルに、このファイルに書き込まれる最後の行であることを示すENDという単語が付いています。ピーターは範囲A1(ピーターという言葉を含む)をD4に含む。ジャックA5からD8、ビリーA9からD12。
use strict;
use warnings;
### INPUT
my $split_woord = 'END'; #word that signals file to be split
print "Input file: ";
my $file_name = <STDIN>;
my $input_file = "file locataion/$file_name.csv";
### OPEN
open (INPUT, ">", "$input_file") or die "Can't open $file_name: $!\n";
my $name= undef;
while (<INPUT>){
my $line = $_;
my ($a,$b,$c,$d)=split('\,', $line);
until ($a eq $split_word){ #loop until column 1 reads 'END', then restart
$name eq $a; #want to indictae first line
my $output_file = "file_location/$name.csv";
open (OUTPUT, ">>", "$output_file") or die "Can't create $output_file: $!\n";
print OUTPUT "$a,$b,$c,$d\n";
next;
}
}
exit;
私が正しくループにそれを得ることができないよう、また、ファイルの名前として機能するように、最初の列/行を使用するために苦労しています:
私はこれまでのところ、これを持っています。どんな助けも大いに評価されるでしょう!すべてのTIA
'csplit'はシェルコマンドです。それを試してみましたか? – Ashish
また、他の質問もチェックしてください。http://stackoverflow.com/questions/8272017/split-files-based-on-file-content-and-pattern-matching – Ashish
ここで課題を行うことを意味していますか? $ name eq $ a; #最初の行を示すことを望みます$ name = $ a; – jmcneirney