
以下のように記述されたc:\tmp\test.txtの3行目に、
test.txt######################ここから
test1
test2
test3
test4
test5
##############################ここまで
以下のように記述されたc:\tmp\insert.txtの中身全てを追加書きして、
insert.txt####################ここから
insert1
insert2
insert3
insert4
insert5
#############################ここまで
c:\tmp\test.txtが以下のような結果になるVBScriptを作成したいです。
test.txt#####################ここから
test1
test2
insert1
insert2
insert3
insert4
insert5
test3
test4
test5
#############################ここまで
色々調べたのですがどうしても上手くいきません。
もし上記結果が得られる方法がありましたらご教授ください。
No.2ベストアンサー
- 回答日時:
#1 Wizard_Zeroです。
雑なコードですが・・・
Dim objFSO
Dim fileRead, fileWrite
Dim strTestLines
Dim i
Set objFSO = CreateObject("Scripting.FileSystemObject")
' test.txt を読み込んで配列化
Set fileRead = objFSO.OpenTextFile("test.txt")
strTestLines = Split(fileRead.ReadAll, vbCrLf)
fileRead.Close
' inset.txt を読み込み、test.txt を書き込み(上書き)で開く
Set fileRead = objFSO.OpenTextFile("insert.txt")
Set fileWrite = objFSO.CreateTextFile("test.txt", True)
' test.txt へ上書き
fileWrite.WriteLine strTestLines(0) ' 元の1行目
fileWrite.WriteLine strTestLines(1) ' 元の2行目
fileWrite.WriteLine fileRead.ReadAll ' insertのすべて
' 元の残り - 1行
For i = 2 To UBound(strTestLines) - 1
fileWrite.WriteLine(strTestLines(i))
Next
' 最後の1行は改行なし
fileWrite.Write strTestLines(UBound(strTestLines))
fileWrite.Close
fileRead.Close
ご教示頂いたコードで試したところ、理想的な結果を得ることができました!
迅速かつ丁寧にご回答頂き大変感謝します。
ありがとうございました。
No.1
- 回答日時:
いくつか方法があります。
方法1:読み取りファイルを先に複製
1. test.txt を複製しtest.txt.tmpを作る
2. test.txt.temp と insert.txt を読み取りモードで開く
3. test.txt を書き込み(上書き)モードで作成
4. test.txt に test.txt.tempから2行分読み取って書き込み
5. inser.txt から全行読み取って書き込み
6. test.txt.temp の残りの行を読み取って書き込み
7. test.txt.temp を削除
この方法は、test.txtの作成日時をそのままに更新日時だけが変わります。
方法2:一旦一時ファイルに書き出してリネーム
1. test.txt と insert.txt を読み取りモードで開く
2. test.txt.tmpを書き込みモードで開く
3. test.txt から2行、inser.txtから全行、test.txtの残りの順でtest.txt.tmpへ書き込む
4. test.txt を削除し、test.txt.tmpをtest.txtへリネーム
この方法だとファイルの作成日時も新しくなります。
方法3:test.txtの中身をすべて読み込んでおく
1. test.txtを開き、全行を読み込んでおく(改行でSplitした文字列配列として)
2. inser.txtを読み取りモードで開く
3. test.txtを上書きモードで開く
4. test.txtに文字列配列から2行分、insert.txtの全行、文字列配列の残りの順で書き込む
作業用のファイルを複製したり削除したりしません。
どの方法で試しているのか、コードのどの部分がうまくいかないのかも示していただければより詳しく回答できます。
方法3:test.txtの中身をすべて読み込んでおく
1. test.txtを開き、全行を読み込んでおく(改行でSplitした文字列配列として)
2. inser.txtを読み取りモードで開く
3. test.txtを上書きモードで開く
4. test.txtに文字列配列から2行分、insert.txtの全行、文字列配列の残りの順で書き込む
こちらが私もトライしている方法に近く、且つ処理後のファイルの結果が最も理想的です。
もし可能でしたら、サンプルコードをご掲示頂けると大変助かります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA セル間のリンク修正につい...
-
複数のExcelファイルをマージす...
-
【ExcelVBA】5万行以上のデー...
-
VBAでCOPYを繰り返すと、処理が...
-
【VBA】 結合セルに複数画像と...
-
【マクロ】並び替えの範囲が、...
-
vba textboxへの入力について教...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
Vba Array関数について教えてく...
-
VBAの「To」という語句について
-
エクセルのVBAコードについて教...
-
Excelのマクロについて教えてく...
-
以下のプログラムの実行結果は...
-
ExcelのVBAコードについて教え...
-
【VBA】値を変更しながら連続で...
-
VBA 入力箇所指定方法
-
Excel VBA 選択範囲の罫線色の...
-
【マクロ】開いているブックの...
-
vb.net(vs2022)のtextboxのデザ...
-
testファイル内にある複数のpng...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル名を複数個配列で確保...
-
連番のファイルを何個も開きたい
-
「パスが見つかりません」とい...
-
C++でのテキストファイル読み込...
-
Perl エラーログを指定の場所...
-
ifstream/ofstream について
-
テキストファイルの各行を配列...
-
VC++でperlプログラムを動かすには
-
バッチファイルでテキストファ...
-
Visual Basicを使って三平方の...
-
VBScriptにて、テキストファイ...
-
while文がうまく動かない
-
excel 2003から VBAのreplaceマ...
-
複数のファイルを読み込み、1...
-
Pythonでテキストを行数指定し...
-
リストの単語がテキストファイ...
-
Pythonで非日本語のUnicode文字...
-
FORTRANのプログラミング
-
perl の挙動について
-
Perl アンド検索
おすすめ情報