はじめて掲載します。
VBSでフォルダ内のテキスト形式ファイルすべてに対して先頭から
3行目と後尾から3行目を削除したいのですが・・・
良い方法はありますでしょうか?
> 良い方法はありますでしょうか?
良いも悪いも、そのようにゴリゴリと、「自力で」コーディングするしか無いかと。
大まかな処理イメージで言うと、
1. FileSystemObject を利用して、Folder オブジェクトからファイルを列挙。
2. OpenAsTextStream で個々のファイルを読み取る。
3. 先頭末尾の3行ずつを取り除き、ファイルに保存。
という感じですよね。
あとは、元のファイルを上書きで加工するのか、加工した結果ファイルを
別フォルダに配置するのかなど、細かい処理を付け加えれば良いのでは。
魔界の仮面弁士 様
助言ありがとうございます。
まったくそのとおりですね。。
Just Do it! でがんばってみます。
とも
いろいろ調べているのですが、
テキストファイル内の行を削除する方法って
結構、難しいように思いますが、
そのあたりってどうでしょうか??
効率的なテクニックがあるのでしょうか?
行を削除するというよりも、それらの行を含んでいないデータを
作りなおす、という方向で考えてみてください。
単純なところでは、
(1) ファイル中の全データを読み込む。← ReadAll メソッド
(2) 改行コードで分割する。← Split 関数
(3) 分割した行数をカウント。← UBound 関数
(4) [4行目]〜[末尾-3行目]までループ。← For ステートメント
(5) ループ中で個々の行を別ファイルに追記。← WriteLine メソッド
という感じにしてみるとか。
ファイルサイズが何百メガバイトもあって、一度に読み込めないなら、
1行ずつ読み書きすれば良いのではないかと。
良い案ではないですが
3行目と後尾から3行目を削除したいのですが・・・
との事なので、
>ファイルサイズが何百メガバイトもあって、一度に読み込めないなら、
>1行ずつ読み書きすれば良いのではないかと。
の時は、先に何行あるのかをカウントしないと最後から3行目の判定が
出来ないと思いますので気をつけてください。
>>ファイルサイズが何百メガバイトもあって、一度に読み込めないなら、
>>1行ずつ読み書きすれば良いのではないかと。
> の時は、先に何行あるのかをカウントしないと最後から3行目の判定が
> 出来ないと思いますので気をつけてください。
(1) 読み込んだ行を、適当なバッファ(Dictionary や配列など)に溜めていく。
(2) バッファが3行を超えたら(つまり4行以上になったら、そのバッファの
先頭行を別ファイルに出力して、バッファの先頭行を破棄する。
(3) 次の1行をバッファに読み込んで、手順(2)に戻る。
という作業をファイル終端まで繰り返せば、最後の3行は出力されませんよね。
ツイート | ![]() |