- ベストアンサー
テキストファイルからの抽出方法を教えてください
- VBAやコマンドプロンプトを使用して、テキストファイルから特定のキーワードを含む行の前の行を抽出する方法を教えてください。
- VBAで試してみたが、リストから行番号を指定して元のファイルから特定の行を抽出する方法がわからない。
- Powershellを勉強中で、それでも実現できるか知りたい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「現在の行を受け取る変数とは別に、前の行の内容を保存しておく変数を用意すればいい」というのがわからなかったということですね…。あなたのコードを修正するのならこんな感じでしょう。「preLine」に前の行を保存しておくということです。 ちなみに「Line Inputステートメント」はVBSでは使えないので、もしもVBSで書きたい場合には、FileSystemObjectなどを使って書き換えましょう。それでも、考え方は同じです。 Sub timeout() keyword = "タイムアウト" i = 0 Open "C:150423-all.txt" For Input As #1 Open "C:150423-timeout-vba.txt" For Output As #2 keyword = "*" & keyword & "*" readLine = "" Do Until EOF(1) i = i + 1 preLine = readLine Line Input #1, readLine If readLine Like keyword Then Print #2, CStr(i) + ":" + preLine End If Loop Close End Sub
その他の回答 (1)
- pringlez
- ベストアンサー率36% (598/1630)
現在の行を受け取る変数とは別に、前の行の内容を保存しておく変数を用意すればいいだけでしょう。 もしもこれで分からないのなら、「その出力ファイルを読み込んで、一つ手前の行番号のリストを作ることまではできました。」というあなたのコードを貼りましょう。 あと「VBAでもコマンドプロンプトでもいい」ということなら、Excelの機能を使うわけではないということでしょうか?それならVBSで書いた方がファイルの管理が楽になりますし、ファイルサイズも小さくなりますし、簡単に実行できますよ。
補足
早速の回答ありがとうございます。 しかしVBAじゃなくてVBSで検索したら他にも参考になるのが出てきてうっかりしたなあと…。 思考錯誤で作っている途中なので、冗長な書き方になっていますけれど、下記まで書きました。 またExcelで必ず動かさなければならないという訳ではないので、WSHでも問題ないです。 Sub timeout() keyword = "タイムアウト" i = 0 Open "C:150423-all.txt" For Input As #1 Open "C:150423-timeout-vba.txt" For Output As #2 keyword = "*" & keyword & "*" Do Until EOF(1) i = i + 1 Line Input #1, readLine If readLine Like keyword Then Print #2, i End If Loop Close 'ここから書けない i = 0 Open "C:150423-timeout-vba.txt" For Input As #1 Open "C:150423-timeout-vba-ln.txt" For Output As #2 Do Until EOF(1) i = i + 1 Line Input #1, readLine j = readLine - 1 Print #2, j Loop Close End Sub
お礼
回答ありがとうございました。 おかげさまで私のやりたいことができます。 勉強になりました。