dポイントプレゼントキャンペーン実施中!

特定のDir内、複数ファイルのレコードを全てマージする為、
以下の処理を考えておりますが実現に至っておりません。

Fileがなくなるまで、ループ処理をさせる為、File名
の(1)から(2)へFile名の受け渡し方法が解かりません。
何方か有識者の方、ご教授頂けませんでしょうか
もっと賢くマージが出来るので有りますならば、その方法
を教えて頂けませんでしょうか
※Dir内にFileはユニークなFile名にて、複数個作られます。
※マージに必要なFileだけがDirには作られます。
※マージするFileの順番は問いません。

(1)C:\temp\temp Dir内のFile名を取得
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("C:\temp\temp")
objFile = objFso.GetAbsolutepathname("temp_ini.txt")
Set objOut = objFso.OpenTextFile(objFile, 2, False)
For Each objFile In objFolder.Files
objFilemei = objFile.Name
objOut.Writeline objFilemei
next
※File名の受け渡しがわからず、一旦Fileに書き出してます

(2)Fileが無くなるまで、File内のレコードを全て読込み、マージファイルを作成(予定)
objFile1 = objFso.GetAbsolutepathname("temp_temp.txt")
Set objin = objFso.OpenTextFile("temp_ini.txt",1)
Do Until objin.atendofstream = True
linedata = objin.readline()
loop

説明が悪くてすみませんが、よろしくお願い致します。

A 回答 (3件)

やさしく説明するよりもソースとコメントの方が分かりやすいと思うので。



Option Explicit

'対象フォルダ
Const TRAGET_FOLDER = "C:\temp\temp"

'集計ファイルパス
Const OUTPUT_PATH = "C:\temp\sum.txt"

'FileSystemObject
Dim objFso

'対象ディレクトリ
Dim objFolder

'対象ファイル
Dim objFile

'対象ファイルテキストストリーム
Dim objTS

'出力先ファイルオブジェクト
Dim objOutFile

'カウンタ
Dim i

'FileSystemObject生成
Set objFso = CreateObject("Scripting.FileSystemObject")

'対象ディレクトリを取得
Set objFolder = objFSO.GetFolder(TRAGET_FOLDER)

'出力先ファイルを開く
Set objOutFile = objFso.CreateTextFile(OUTPUT_PATH)

'対象ディレクトリにあるファイル分繰り返し処理
For Each objFile In objFolder.Files

'ファイルを開く
Set objTS = objFile.OpenAsTextStream(1, -2)

'5行スキップ
For i = 1 To 5
'ファイル末尾判別
If Not objTS.AtEndOfStream Then
objTS.SkipLine
End If
Next

'ファイル末尾まで書き出し
Do While objTS.AtEndOfStream <> True
objOutFile.writeLine(objTS.readLine)
Loop

'ファイルを閉じる
objTS.Close

'オブジェクトの解放
Set objTS = Nothing

Next

'出力ファイルを閉じる
objOutFile.Close

'後処理
Set objOutFile = Nothing
Set objFso = Nothing
    • good
    • 0
この回答へのお礼

まずは、御礼を述べさせて頂きます。
「大変有難うございます。」
そのまま、答えを頂いたのですが答えにたどり着く公式を
未だに調べている状態にあります。
作る人が作るとこんなにスッキリ無駄がないものだと関心
致しました。
今後、人の作ったものなど参考に、自分でも作成できる様
努力致します。

お礼日時:2007/02/27 17:46

事務職で初心者であるならば無理にプログラミングを行わなくてもフリーソフトを使用してみてはいかがでしょうか?


たとえばこんなのとか
http://www.vector.co.jp/soft/winnt/util/se319087 …

参考URL:http://www.vector.co.jp/vpack/filearea/win/util/ …

この回答への補足

記述はしておりませんでしたが、マージ前に、各Fileヘッダー部分
のレコード、5行をスキップする為、VBSにて勉強がてら作成を試み
ました。何が何でもVBSと言う訳では有りませんが・・・無理ですかね。

補足日時:2007/02/27 14:09
    • good
    • 0

もう少し詳しく説明していただいたほうがいいですね。


少しポイントがわかりにくいかと思います。
マージ処理にも色々とありますし、マージの部分を聞いているのか、
アルゴリズム部分を聞いているのか、
変数の受け渡しの部分を聞いているのかがわかりにくいですね。
(プログラム歴とかも教えていただくと、スキルの近い人から上位の方が答えてくれるかと思います。)
この質問ですと、上級者の方の質問なのか、初心者の方の質問なのかで捕らえ方がかなり違ってしまいます。

この回答への補足

当方事務職・初心者です、説明もうまく出来ずご迷惑お掛け致します
現在、日々行っている作業を、特定の日時にPCに行わせたいと考え・・・
現在手作業にて行う作業は
・Dir「C:\temp\temp」には、1日1個のFileが格納されます。(自動)
・Fileは「yyyymmddxxxx.txt」の名前で作成されます。(自動)
 同じ名前は存在しません。
・月に1度、Dir「C:\temp\temp」に作成されたFileをテキスト
 エディタにて開き、全てのFileのレコードをCopy and Pasteの
 繰り返しにてマージFileにまとめます。(月1手動)

アルゴリズムを問われてもよくわかりませんので、変数の受け渡し
を教えて頂けませんか。
前問い合わせにて
(1)にてDirに格納されたFlle名は解かりました。
(2)にてFileがなくなるまで処理を続けようと思います。
 さらにDoを中に入れ、今度はレコードが無くなるまで読込み
 マージFileへ書き出したいと思いましたが。
その際、File受け渡し方がよく解かりません。

objFile1 = objFso.GetAbsolutepathname("temp_temp.txt")
Set objin = objFso.OpenTextFile("temp_ini.txt",1)
Do Until objin.atendofstream = True
linedata = objin.readline()
++++++++++++++++++++++++++
Do xxxx.atendofstream
  ↑読込むFileを受け渡すには?
loop
++++++++++++++++++++++++++
loop

そもそもマージ処理をVBSにて行う場合、このような作りに
なるのか疑問ですが、どなたかご教授願えませんでしょうか。

補足日時:2007/02/27 09:19
    • good
    • 0

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