557 :
名無しさん@お腹いっぱい。:
複数のテキストファイルを一括処理してくれるソフトを探してます。
OSはWindows Me、できれば無料が希望です。
一括処理したいファイル数⇒100個くらい
[やりたいこと]
100個すべてのファイルの10行目に一括でテキストを挿入。
挿入するテキストは100個すべて違う内容で文字数や行数も違う。
イメージとしては、AさんBさんCさん3人の日記100日分を
1月1日のAさんBさんCさんの日記でひとつのファイル、
1月2日のAさんBさんCさんの日記でひとつのファイル、
1月3日のAさんBさんCさんの日記でひとつのファイル、
というような感じでしょうか。
色々試してみて、今のところQXというテキストエディタが
わりと使いやすい方でしたが、一括処理はできないようで
100回タブを切り替えて100回コピペ、という大変な作業でした。
ご存知の方いらっしゃいましたら、よろしくお願いいたします。
>>557 マクロ使えれば楽なんだが、聞きに来るくらいだから無理かなぁ。
>>557 perl で簡単に書けそうですが、やりたいことがよくわかりません。
>100個すべてのファイルの10行目に一括でテキストを挿入。
>挿入するテキストは100個すべて違う内容で文字数や行数も違う。
>1月1日のAさんBさんCさんの日記でひとつのファイル、
>1月2日のAさんBさんCさんの日記でひとつのファイル、
x=001〜100 まで変化させながら以下のことする {
出力先ファイル Zx.txt に、
入力ファイル Ax.txt の内容・Bx.txtの内容・Cx.txtの内容を順次出力していくんだけど
ABCあわせて9行出力したところで(10行目の前に)、別の入力ファイルDx.txt をぺたっと出力、
それからABCの順番出力を続ける。
}
こういうこと?
560 :
557:2005/11/24(木) 11:18:13 ID:Aj4LzMGw0
>>558 一度はマクロにも注目してみたのですが
設計図がイメージできなくてひとまず保留にしてあります。
QXのマクロで、という解釈で合っていますでしょうか?
楽、というのはとても魅力的ですので再度チャレンジしてみます。
>>559 説明不足ですみません。
ABCは場合によってはABCDだったりABだったりしますが
100個をひとグループとした100ファイルは一貫して
ABCなら100個全部ABC、ABなら100個全部ABです。
Aの100個、Bの100個、Cの100個はそれぞれまったく不規則ですので
ファイル1はAが15行、Bが8行、Cが21行、
ファイル2はAが3行、Bが35行、Cが16行、だったりします。
さらに、ヘッダとフッタもあり、ABCそれぞれの間にもテキストがありますので
プログラム的には、ABCDEFGHIくらいになるのかもしれません。
10行目に一括で、と表現したのは、その方法さえわかれば
あとはそれを応用すれば何とかなりそう、との見込みからでした。
ですから、ABCから10行だけピックアップして貼り付ける、
という意味ではありませんでした。
簡単に書けそうなのですか!?
自分でもperlの勉強にチャレンジしてみますが、
もし楽勝だよ、ということでしたらお願いしてもよろしいでしょうか?
要約しねーと答えられない
562 :
559:2005/11/24(木) 12:36:21 ID:7OCsmC/T0
>>557 外出前で暇なので、いちおう書いておきました。
こんなスクリプト書いてくださいのほうに投棄しておきますので好きにいじってください。
こんなソフトありませんか24 の557へ。
#!/usr/bin/perl -w
for $x ( 1..100 ){
$outfile=sprintf("X%03d.txt", $x); # 出力先 X001.txt〜X100.txt
@files = ( # 入力
sprintf("A%03d.txt",$x), # A001.txt〜A100.txt
sprintf("B%03d.txt",$x), # B001.txt〜B100.txt
sprintf("C%03d.txt",$x) ); # C001.txt〜C100.txt
$cmfile=sprintf("D%03d.txt", $x); # コマーシャル D001.txt〜D100.txt
open(FO, ">$outfile") || die "can't open $outfile";
# header 処理したいならここに追加する
$linecount=0;
foreach (@files) {
open(FI, $_) || die "can't open $_";;
while(<FI>){
$linecount ++;
print FO "$linecount: $_";
if( $linecount == 9 ){ # 9行目出力したらコマーシャル
open(FC, $cmfile) || die "can't open $cmfile";
while(<FC>){
print FO "CM: $_";
}
}
}
close(FI);
}
# footer 処理したいならここに追加する
close(FO);
}
ぎゃー間違えてこっちに貼ってしまった。すみません皆さん。
以降はこんなスクリプトでの方で話しましょう。
>>557