- 締切済み
VBSで指定行に挿入
VBScriptで指定行に文字列を挿入したいと思っていますが可能でしょうか? 例:)2行目に挿入 前 後 1 1 2 挿入列 3 2 3 先頭から呼んでいき WriteLineを… と思ったのですが、最後尾に追加でした^_^; で、新規ファイルに順に呼んで(前)を削除、(後)をリネーム。と考えたのですが、スマートではありません。 なにかよいメソッドはあるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- MidKnight
- ベストアンサー率57% (20/35)
'----------- ファイルシステムオブジェクト作成 Set objFso = CreateObject("Scripting.FileSystemobject") '----------- 定数の作成 Const ForReading = 1 '読取フラグ Const ForWriting = 2 '書込フラグ Const ForAppending = 8 '追記フラグ Const InsertLine = 2 '文字列の挿入行 Const InsertText = "Inserted!" '挿入する文字列 Const strPath = "test.txt" '処理するテキストファイルのパス '----------- ファイルが存在することを確認 If objFso.FileExists(strPath) = False Then MsgBox "指定のファイルがみつかりません" WScript.Quit 'なければ終了 End If '----------- テキストの行数を確認 Set objRead = objFso.OpenTextFile(strPath , ForReading) '読取モードでテキストを開く objRead.ReadAll '全部読むことで最終行へ移動 intLine = objRead.Line '現在の行数を確認 objRead.Close '読取モード閉じる '----------- テキストの挿入 If intLine <= InsertLine Then '挿入行がテキストの行数より大きいか、同じの場合 Set objAppending = objFso.OpenTextFile(strPath , ForAppending) '追記モードでテキストを開く objAppending.WriteLine InsertText '挿入行の追記 objAppending.Close '追記モード閉じる Else '挿入行がテキストの行数より小さい場合 Dim WritingText '書込用の文字列(省略可) Set objRead2 = objFso.OpenTextFile(strPath , ForReading) '読取モードでテキストを開く i = 1 '行数の確認用の数値 Do Until objRead2.AtEndOfStream = True '終了行まで繰り返し If i = InsertLine Then '挿入行が来たら、文字列を挿入 WritingText = WritingText & InsertText & vbCrLf 'vbCrLfは改行コード End If WritingText = WritingText & objRead2.ReadLine & vbCrLf '1行読み取り、書込用の文字列に追加 i = i + 1 '読み取った行数を1増やす Loop objRead2.Close '読取モード閉じる Set objWriting = objFso.OpenTextFile(strPath , ForWriting) '書込モードでテキストを開く objWriting.Write WritingText '書込用の文字列値を一気に書込み objWriting.Close '書込モード閉じる End If '----------- 完了メッセージ MsgBox "挿入完了" 見やすくするため全角スペースを入れてあります。
1.新規ファイルに元ファイルから指定行の前までコピー 2.指定行に挿入 3.元ファイルの残りをコピー こんなのでどうでしょう?