• 締切済み

同じ番号のデータを別のファイルにはきだだすには?

下の画像のようのデータを一行一行みていき、先頭二桁が上の行と同じ場合それを同じファイルに一行一行はきだしたいです。 例 3,4,5行目は3.txt ファイルにはきだす。6.7行目は2.txtファイルにはきだす。その他は1.txtファイルにはきだす。 シンプルでわかりやすい方法を教えていただきたいです。 よろしくお願いいたします。

みんなの回答

  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.4

効率化しないで単純に組むのなら my @lines; my %count; foreach(<>) { push(@lines, $_); my ($key) = split(/\s+/); $count{$key} += 1; } foreach(@lines) { my ($key) = split(/\s+/); my $n = $count{$key}; open(FH, ">> file_$n.txt"); print FH $_; close(FH); }

  • ybnormal
  • ベストアンサー率50% (220/437)
回答No.3

泥臭くやるとこんなかんじですかね。 出力のところは適当に変えてください。 while(<>){ chomp; @x = split(/\s+/, $_); push(@{$x[0]}, $_); $list{$x[0]}++; } foreach $tmp (keys %list){ if($list{$tmp} == 1) print "single @{$tmp}\n"; } else { print "duplicate @{$tmp}\n";   } }

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

補足要求です。 質問1 3、4,5行目は3.txtに書きますが、その3.txtの3は どこからきていますか。 先頭2桁が同じものが3個あるので、3.txtとする理解したのですが、 そうすると、8行目の先頭2桁が7行目と同じだった場合、 6,7,8行目は3.txtに書いてよいのでしょうか? ???.txt の???の部分を決める規則を正確に提示してください。 質問2 もし、10行目に以下のようなデータあった場合は どうしますか。 20 七朗 コスモス つまり6,7行目と同じ先頭二桁をもつデータあった場合です。 1.txtに書くのですか、それとも、6,7行目に書いたファイルに書くのですか?

kosiba
質問者

補足

質問内容が不明確ですいません。 以下補足です。 質問1 ???.txt  の部分は1、2、3のいずれかになります。 同じものがない場合は1.txt 同じものが2つの場合は2.txt 3つの場合は 3.txtにはきだします。 質問2 連続である場合以外、同じものはありません。 ですので10行目以下に先頭 ”20 ”のものはありません。 よろしくお願いいたします。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

whileまたはfor{  splitで配列を作る  $0の値でハッシュを作る。  ハッシュのキーが存在すれば、追加する。 } ハッシュを一巡して、複数配列を持つものはprint OUTしてハッシュを削除 最後に残ったハッシュを印刷  {}内で一度にしてもよい。 ★フローチャート書いてから始めましょう。

関連するQ&A