以下のようなファイル名のLOGファイルが50個存在しています。


【LOGファイル名】
Example_20120601_小_001.LOG
Example_20120601_小_002.LOG
Example_20120601_小_003.LOG
・・・・・
Example_20120601_小_026.LOG
Example_20120601_大_027.LOG
・・・・・
・・・・・
Example_20120601_大_049.LOG
Example_20120601_大_050.LOG

LOGファイルの中身は以下のようにカンマ区切りで
「日付時刻」「お客様番号」「性別コード」「エラーコード」を1行(1レコー ド)として、複数行(複数レコード)で構成されています。

【LOGファイルの中身】
2012/06/01 02:56:03,12345-67-890,0,0
2012/06/01 02:56:16,12345-67-890,0,0
2012/06/01 02:56:22,12345-67-890,0,0
2012/06/01 02:57:09,987-65-432,0,0
2012/06/01 02:58:03,987-65-432,0,0
2012/06/01 03:01:12,11111-22-333,0,0
2012/06/01 03:01:22,11111-22-333,0,0


全 LOGファイル内の「お客様番号」の「3」と「5」を
下記のように全て「○」へ変換するための
WSH(エクセルVBAでも可)を教えてください。

【WSH処理後のLOGファイルの中身】
2012/06/01 02:56:03,12○4○-67-890,0,0
2012/06/01 02:56:16,12○4○-67-890,0,0
2012/06/01 02:56:22,12○4○-67-890,0,0
2012/06/01 02:57:09,987-6○-4○2,0,0
2012/06/01 02:58:03,987-6○-4○2,0,0
2012/06/01 03:01:12,11111-22-○○○,0,0
2012/06/01 03:01:22,11111-22-○○○,0,0

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/08/29 10:15:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:gong1971 No.1

回答回数451ベストアンサー獲得回数70

ポイント250pt

ExcelのVBAで作成しました。

※必ずデータのバックアップを取ってからご使用ください。
※変換後のデータに間違いがないか、よくご確認ください。

※VBAの最初の行でLOGファイルを格納するフォルダのパスを指定しています。
 パスは適宜変更してください。
※上記フォルダには処理を行うLOGファイルのみ保存し、
 別途「done」という空のフォルダを作成してください。
 「done」フォルダに処理結果のファイルを作成します。

以下、VBAです。不明な点がありましたら、コメントでお知らせください。

Sub Macro1()

ChDir "C:\Documents and Settings\USER\デスクトップ\VBA\LOG"
dd = Dir("*.LOG")

Application.DisplayAlerts = False

Do Until dd = ""
Workbooks.OpenText Filename:=dd, Comma:=True, _
FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 1), Array(4, 1))
Columns("B:B").Select
Selection.Replace What:="3", Replacement:="○", LookAt:=xlPart
Selection.Replace What:="5", Replacement:="○", LookAt:=xlPart
ActiveWorkbook.SaveAs Filename:="done\" & dd, FileFormat:=xlCSV
ActiveWorkbook.Close
dd = Dir()
Loop

Application.DisplayAlerts = True

End Sub

id:gong1971

補足

指定したフォルダ内の拡張子がLOGのファイルをすべて処理します。
まずは2~3個のファイルで正常に動作するか試してください。

2012/08/22 12:55:13
id:korai No.2

回答回数4ベストアンサー獲得回数1

ポイント250pt

WSHでばっくり組んで見ました
動かしてないから細かいミスがあるかも
該当フォルダ配下にcnvというサブフォルダ作成して、元のフォルダに格納されているファイル全部読んだ上で、変換結果を同一ファイル名でサブフォルダに格納していきます

Set fs = WScript.CreateObject("Scripting.FileSystemObject")

'対象のフォルダ
Dim FolderName
Dim FolderNameCnv

Dim readData
Dim arrReadData

Dim convreadData

FolderName ="c:\temp"
FolderNameCnv = Folder_Name & "\cnv"

Set objFolder = fs.GetFolder(FolderName)

'変換したファイルを格納するフォルダ
if fs.FolderExists(FolderNameCnv)
fs.CreateFolder(FolderNameCnv)
end if

'全部のファイルをループする
For Each objFile In objFolder.Files
Set f1 = fs.OpenTextFile( FolderName & "\" & objFile.Name)
Set f2 = fs.CreateTextFile(FolderNameCnv & "\" & objFile.Name, True)

readData=""
Do While f1.AtEndOfStream <> True
readData = f1.ReadLine
arrReadData = split(readData,",")
arrReadData(1) = replace(arrReadData(1),"3","○")
arrReadData(1) = replace(arrReadData(1),"5","○")
convreadData = arrReadData(0) & "," & arrReadData(1) & "," & arrReadData(2) & "," & arrReadData(3)
f2.WriteLine convreadData
Loop

f1.Close
f2.Close

Next

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません