アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のように記述された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
#############################ここまで

色々調べたのですがどうしても上手くいきません。
もし上記結果が得られる方法がありましたらご教授ください。

A 回答 (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
    • good
    • 0
この回答へのお礼

ご教示頂いたコードで試したところ、理想的な結果を得ることができました!
迅速かつ丁寧にご回答頂き大変感謝します。
ありがとうございました。

お礼日時:2009/10/08 07:25

いくつか方法があります。



方法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の全行、文字列配列の残りの順で書き込む

作業用のファイルを複製したり削除したりしません。

どの方法で試しているのか、コードのどの部分がうまくいかないのかも示していただければより詳しく回答できます。
    • good
    • 0
この回答へのお礼

方法3:test.txtの中身をすべて読み込んでおく
1. test.txtを開き、全行を読み込んでおく(改行でSplitした文字列配列として)
2. inser.txtを読み取りモードで開く
3. test.txtを上書きモードで開く
4. test.txtに文字列配列から2行分、insert.txtの全行、文字列配列の残りの順で書き込む

こちらが私もトライしている方法に近く、且つ処理後のファイルの結果が最も理想的です。
もし可能でしたら、サンプルコードをご掲示頂けると大変助かります。

お礼日時:2009/10/08 02:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A