• ベストアンサー

ファイルを分割する。

shun_helloworldの回答

  • ベストアンサー
回答No.3

my $file = "./test.txt"; open (FILE, $file) or die "$!"; chomp(my @lines = <FILE>); close FILE; my $n = 0; for my $line (@lines) { $n++ if ( $line =~ /^\s*?$/ ); open (FILE, ">> $n.txt") or die "$n.txtを作れませんでした。 : $!"; print FILE "$line\n" unless ( $line =~ /^\s*?$/ ); } close FILE; 物凄く適当ですけど。

hanabi100
質問者

お礼

ご親切にありがとうございます。 ちなみにmy $n = 0;というのは0行目から読み込むということなのでしょうか?

関連するQ&A

  • ファイル名一括変換ソフト

    ■[フォルダ0]の中 [保存1] >[フォルダ1] > [テスト] > Text.txt [保存1] >[フォルダ2] > [テスト] > Text.txt [保存1] >[フォルダ3] > [テスト] > Text.txt [保存1] >[フォルダ4] > [テスト] > Text.txt ">"は下位のフォルダです。 こういうフォルダ階層がありファイルがあったときに 一括で各Text.txtの名前を たとえば [保存1] >[フォルダ1] > [テスト] > Text.txt だったら、 "Text.txt" から "フォルダ1.txt"にしたいのです。 数階層上のフォルダ名を指定し、ファイル名にリネームしたいのですが、なにかよいフリーソフトはないでしょうか。 まとめると、 Windowsの検索機能後、ドラッグ&ドロップ、もしくはソフトの検索機能で変更したいファイル名を指定し、好きなフォルダ名を指定してファイル名に付加できるものがないかと思っています。 いままでリネームソフトにはNamery というソフトを使用してきたのですができませんでした。 どなたか、ご存知のソフトがありましたら、教えていただけると助かります。よろしくお願いいたします。

  • ファイルの3行目までを出力したい

    Perl初心者です。 test.txtというファイルがあって、その中の1行目から3行目までを 出力したい場合はどうしたらいいでしょうか? open(FILE,"test.txt") || die "Open Error.\n"; @data = <FILE>; close(FILE); foreach (@data) { print $_; } これだと、ファイルの中身が全て出力されてしまいます。

    • ベストアンサー
    • Perl
  • リストを読み込んでファイル名を書換るバッチファイル

    バッチファイル(test.bat)で、 変更前のファイル名が1行に1つずつ書かれたテキストファイル1(no1.txt)と 変更後のファイル名が1行に1つずつ書かれたテキストファイル2(no2.txt) を読み込んで、 no1.txtのn行目のファイル名のファイルを、 no2.txtのn行目のファイル名に書き換える バッチファイルを作りたいのですが、 (n=1,2,3,4…行数) どのように記述すればよいでしょうか。 具体的には、 フォルダAに 123.txt 456.txt 789.txt というファイルが入っていたとして、 no1.txtのファイルには、 123.txt 456.txt 789.txt no2.txtのファイルには、 ABC.txt DEF.txt GHI.txt が書かれていて、 test.batを実行すると、 フォルダAの中のファイル名が 123.txt => ABC.txt 456.txt => DEF.txt 789.txt => GHI.txt というようにリネームされるようにしたいです。 よろしくお願いします。(Windows10)

  • ファイルが開かない

    こんにちは、最近C言語の入門書を読み とあるプログラムをつくったのですが、思ったようになりません。 そのプログラムは typ1 という名前でこのようになっています。 #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fin; char buf[256]; char filename[80]; printf("入力ファイル名を指定してください="); gets(filename); fin = fopen("filename", "r"); if(fin == NULL) { printf("%sをオープンできません\n", filename); exit(1); } while(fgets(buf, 256, fin) != NULL){ printf("%s", buf); } fclose(fin); return 0; } となっており、プログラムを起動して指定したファイルを読み込んで、その内容を画面に出力するというものです。読み込み用ファイル(名前はsmp1)はメモ帳でつくっており、内容はアルファベットを一行目に、1から9の数字を二行目に書いて、アプリケーションのtyp1.exeがあるDebugというディレクトリと同じ場所に保存しております。 このプログラムはVisual Studio net 2003で作っおり エラー等はなく正常に動くのですが読み込むファイル(この場合smp1)を指定しても 入力ファイル名を指定してください=smp1.txt smp1.txtをオープンできません。 Press any key to continue となってしまいます。  読み込み用ファイルの場所が適切ではないのでしょうか? どなたか教えてください。

  • 文字列を指定して,別のファイルでその文字列が存在する行を出力する

    いつもお世話になっております. 環境はWindows XP Pro でActiveperlを用いてプログラムをしております. この度,皆様にご意見をうかがいたいのは,「文字列を指定して,別のファイルでその文字列が存在する行を出力する」という内容です. まず,以下のテキストファイルがあります. data.txt ---------------------- A BA C DA E FA G sansyo.txt ----------------------------- B D F ------------------------------- 処理として,data.txtでsansyo.txtの行が "含まれる"行数を出力する ------------------------------- output.txt ------------------------------- 2 4 6 ここで自分なりにプログラムを組んでみました. ----------------------------------- open(FILE, "sansyo.txt"); open(FILE2,"data.txt"); @file = <FILE>; close(FILE); @file2 = <FILE2>; close(FILE2); foreach $line (@file) { foreach $line2 (@file2) { if ($line =~ $line2){ $hit = $.; } open(NEWFILE, " >> output.txt") or die "$!"; print NEWFILE $hit; close(NEWFILE); } } #ここまで ------------------------------------- ですが,永久ループに入ってしまったようにファイルはできるのですが, 出力されてきません. 間違っている点をご指摘ください.

    • ベストアンサー
    • Perl
  • Windowsのバッチファイルを利用しtxtファイルの指定のした位置に文字を追加する方法

    現在、下記内容のファイル(test.txt)指定した行に指定文字を追記できる方法を探しております。 【test.txt内容】 [test1] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: [test2] [test4] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: [test5] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: end 【追記したい内容】 test.txtの"[test2]"行の下の行に以下の文字を追記したいです。 [test3] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: 指定行に追記するというコマンド自体はないと思い、batやwshの本などを読んではいるのですがなかなか良い考えが浮かびません。 ご教示の程よろしくお願いいたします。

  • 50万行のtxtファイルを行数指定で分割したい

    50万行レベルのテキストファイルがあります このファイルをVBAで行数を指定して3つのファイルに分割したいのですが可能でしょうか イメージとしては以下のような形になります ・一行目〜テキストボックス1で指定した行数 ・textbox1で指定した行数〜textbox2で指定した行数 ・textbox2で指定した行数〜最終行 どなたか教えて下さい よろしくお願いします

  • batやvbsでテキストファイルの何行目に指定の文字を追記する方法

    現在、下記内容のファイル(test.txt)指定した行に指定文字を追記できる方法を探しております。 【test.txt内容】 [test1] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: [test2] [test4] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: [test5] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: end 【追記したい内容】 test.txtの"[test2]"行の下の行に以下の文字を追記したいです。 [test3] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: 指定行に追記するというコマンド自体はないと思い、batやwshの本などを読んではいるのですがなかなか良い考えが浮かびません。 ご教示の程よろしくお願いいたします。

  • ファイル分割ツール、分割後の拡張子を指定したい

    おはようございます。 ファイル分割ツールを使って大きなファイルを分割したいのですが、分割後のファイルが testfile.txt.000 testfile.txt.001 testfile.txt.002 testfile.txt.003 のようになってしまうソフトが多いようです。これを、 testfile000.txt testfile001.txt testfile002.txt testfile003.txt こんな風に最初から指定できる分割ツールはないでしょうか? 拡張子を一括変更するツールを使うと、ファイル末尾の .000 や .001 が拡張子と見なされ、これを .txt に置き換えようとするのですが、そうするとファイル名が重複してしまいます。 バッチファイルですべてのファイル名の末尾に .txt をつけるというのも手ですが、やっぱり最初の分割時点で拡張子も指定できるものがあると便利です。 よろしくお願いします。

  • ファイル名での読み込み

    eclipseを使ってコードを書いているのですが、ファイルを読み込む時に指定されたファイルがありませんとエラー表示されます。 パスで指定した場合はうまくいくのですが、ファイル名だけで読み込めるようにしたいです。考えられる解決策はありますでしょうか?読み込むファイル自体はプログラムと同じpackageの中に保存しています。 ファイルを読み込む、そのファイルの内容を他のファイルに書き込むというプログラムです。どちらもtxtファイルです。