回答編集履歴
4
ああ
answer
CHANGED
@@ -336,7 +336,7 @@
|
|
336
336
|
|
337
337
|
### 追記3
|
338
338
|
CSVファイルのみを対象にする
|
339
|
-
|
339
|
+
```VBS
|
340
340
|
'========================
|
341
341
|
' リスト取得プロシージャ
|
342
342
|
'========================
|
@@ -362,4 +362,4 @@
|
|
362
362
|
Set objFolder = Nothing
|
363
363
|
Set objFileSys = Nothing
|
364
364
|
End Sub
|
365
|
-
|
365
|
+
```
|
3
あ
answer
CHANGED
@@ -332,4 +332,34 @@
|
|
332
332
|
|
333
333
|
inputFile.Close
|
334
334
|
End Sub
|
335
|
-
```
|
335
|
+
```
|
336
|
+
|
337
|
+
### 追記3
|
338
|
+
CSVファイルのみを対象にする
|
339
|
+
'''VBS
|
340
|
+
'========================
|
341
|
+
' リスト取得プロシージャ
|
342
|
+
'========================
|
343
|
+
Sub GetFiles(ByVal folderPath, ByRef fileList)
|
344
|
+
Dim objFileSys
|
345
|
+
Dim objFolder
|
346
|
+
Dim objFile
|
347
|
+
Dim i
|
348
|
+
i = 0
|
349
|
+
|
350
|
+
Set objFileSys = CreateObject("Scripting.FileSystemObject")
|
351
|
+
Set objFolder = objFileSys.GetFolder(folderPath)
|
352
|
+
|
353
|
+
For Each objFile In objFolder.Files
|
354
|
+
IF objFileSys.GetExtensionName(objFile.Name)="csv" Then
|
355
|
+
'取得したファイルのファイル名を表示
|
356
|
+
redim Preserve fileList(i)
|
357
|
+
fileList(i) = folderPath & "/" & objFile.Name
|
358
|
+
i = i + 1
|
359
|
+
End If
|
360
|
+
Next
|
361
|
+
|
362
|
+
Set objFolder = Nothing
|
363
|
+
Set objFileSys = Nothing
|
364
|
+
End Sub
|
365
|
+
'''
|
2
あ
answer
CHANGED
@@ -200,4 +200,136 @@
|
|
200
200
|
input.Close
|
201
201
|
End Sub
|
202
202
|
|
203
|
+
```
|
204
|
+
|
205
|
+
### 追記2
|
206
|
+
ANSI形式のCSVファイルを読み込めるように、ReadFileプロシージャを変更しました。
|
207
|
+
出力ファイルの形式もANSI形式になるように変更しました。
|
208
|
+
|
209
|
+
変更箇所
|
210
|
+
①WriteFileANSIプロシージャ追加
|
211
|
+
②ReadFileプロシージャ変更
|
212
|
+
|
213
|
+
```VBS
|
214
|
+
Option Explicit
|
215
|
+
|
216
|
+
'===========
|
217
|
+
' メイン処理
|
218
|
+
'===========
|
219
|
+
Dim LineArrM
|
220
|
+
Dim LineArrTemp()
|
221
|
+
Dim CSV_PATH()
|
222
|
+
Dim i
|
223
|
+
|
224
|
+
GetFiles "./CSV", CSV_PATH '※フォルダ以下のCSVファイルパスを取得
|
225
|
+
For i = 0 To UBound(CSV_PATH)
|
226
|
+
ReadFile CSV_PATH(i), LineArrTemp '※ファイルのデータを配列に格納
|
227
|
+
If i = 0 then
|
228
|
+
LineArrM = LineArrTemp '※1ファイル目
|
229
|
+
Else
|
230
|
+
ListMerge LineArrTemp, LineArrM '※2ファイル目以降は重複をチェックしてマージ
|
231
|
+
End If
|
232
|
+
Next
|
233
|
+
|
234
|
+
WriteFileANSI "outputText.csv", LineArrM 'ファイル出力(ANSI)
|
235
|
+
'WriteFile "outputText.csv", LineArrM 'ファイル出力(UTF-8)
|
236
|
+
|
237
|
+
'<メイン処理はここまで>
|
238
|
+
|
239
|
+
|
240
|
+
'<以下はSubプロシージャ>
|
241
|
+
'========================
|
242
|
+
' ファイル書き込み(UTF-8)
|
243
|
+
'========================
|
244
|
+
Sub WriteFile(ByVal outputPath, ByVal arr)
|
245
|
+
Dim output, i
|
246
|
+
Set output = CreateObject("ADODB.Stream")
|
247
|
+
output.Type = 2
|
248
|
+
output.Charset = "UTF-8"
|
249
|
+
output.Open
|
250
|
+
|
251
|
+
for i = 0 To UBound(arr)
|
252
|
+
output.WriteText arr(i), 1 '[0:改行なし 1:改行コード付加]
|
253
|
+
Next
|
254
|
+
output.SaveToFile outputPath, 2
|
255
|
+
output.Close
|
256
|
+
End Sub
|
257
|
+
|
258
|
+
'========================
|
259
|
+
' ファイル書き込み(ANSI)
|
260
|
+
'========================
|
261
|
+
Sub WriteFileANSI(ByVal outputPath, ByVal arr)
|
262
|
+
Dim outputFile, fso
|
263
|
+
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
|
264
|
+
Set outputFile = fso.OpenTextFile(outputPath, 2, True)
|
265
|
+
for i = 0 To UBound(arr)
|
266
|
+
outputFile.WriteLine arr(i)
|
267
|
+
Next
|
268
|
+
|
269
|
+
outputFile.Close
|
270
|
+
End Sub
|
271
|
+
|
272
|
+
'===================
|
273
|
+
' 重複を削除+マージ
|
274
|
+
'===================
|
275
|
+
Sub ListMerge(ByVal arrTemp, ByRef arrM)
|
276
|
+
Dim i,j
|
277
|
+
'※配列Tempで配列Mにない要素だけ配列Mに追加する
|
278
|
+
For i = 0 To UBound(arrTemp)
|
279
|
+
For j = 0 To UBound(arrM)
|
280
|
+
if arrTemp(i) <> arrM(j) then
|
281
|
+
'※配列Mにないものは追加
|
282
|
+
if UBound(arrM) = j then
|
283
|
+
redim Preserve arrM(UBound(arrM) + 1) '配列を+1拡張
|
284
|
+
arrM(UBound(arrM)) = arrTemp(i)
|
285
|
+
End If
|
286
|
+
Else
|
287
|
+
'※配列Mにあるものは追加しない
|
288
|
+
Exit For
|
289
|
+
End If
|
290
|
+
Next
|
291
|
+
Next
|
292
|
+
End Sub
|
293
|
+
|
294
|
+
'========================
|
295
|
+
' リスト取得プロシージャ
|
296
|
+
'========================
|
297
|
+
Sub GetFiles(ByVal folderPath, ByRef fileList)
|
298
|
+
Dim objFileSys
|
299
|
+
Dim objFolder
|
300
|
+
Dim objFile
|
301
|
+
Dim i
|
302
|
+
i = 0
|
303
|
+
|
304
|
+
Set objFileSys = CreateObject("Scripting.FileSystemObject")
|
305
|
+
Set objFolder = objFileSys.GetFolder(folderPath)
|
306
|
+
|
307
|
+
For Each objFile In objFolder.Files
|
308
|
+
'取得したファイルのファイル名を表示
|
309
|
+
redim Preserve fileList(i)
|
310
|
+
fileList(i) = folderPath & "/" & objFile.Name
|
311
|
+
i = i + 1
|
312
|
+
Next
|
313
|
+
|
314
|
+
Set objFolder = Nothing
|
315
|
+
Set objFileSys = Nothing
|
316
|
+
End Sub
|
317
|
+
|
318
|
+
'==================================
|
319
|
+
' CSV読み込みプロシージャ(ANSI専用)
|
320
|
+
'==================================
|
321
|
+
Sub ReadFile(ByVal filePath, ByRef dataList)
|
322
|
+
Dim fso,i
|
323
|
+
Dim inputFile
|
324
|
+
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
|
325
|
+
Set inputFile = fso.OpenTextFile(filePath, 1, False, 0)
|
326
|
+
i=0
|
327
|
+
Do Until inputFile.AtEndOfStream
|
328
|
+
redim Preserve dataList(i)
|
329
|
+
dataList(i) = inputFile.ReadLine
|
330
|
+
i = i + 1
|
331
|
+
Loop
|
332
|
+
|
333
|
+
inputFile.Close
|
334
|
+
End Sub
|
203
335
|
```
|
1
追記
answer
CHANGED
@@ -78,4 +78,126 @@
|
|
78
78
|
input.Close
|
79
79
|
End Sub
|
80
80
|
|
81
|
+
```
|
82
|
+
|
83
|
+
### 追記
|
84
|
+
実行ファイルと同じ階層の「CSV」フォルダ以下のファイルを対象に重複削除・ファイル出力の処理を作ってみました。「CSV」フォルダ以下にCSVファイルを配置して試してみてください。CSVファイルはUTF-8にしてください。
|
85
|
+
|
86
|
+
```VBS
|
87
|
+
Option Explicit
|
88
|
+
|
89
|
+
'===========
|
90
|
+
' メイン処理
|
91
|
+
'===========
|
92
|
+
Dim LineArrM
|
93
|
+
Dim LineArrTemp()
|
94
|
+
Dim CSV_PATH()
|
95
|
+
Dim i
|
96
|
+
|
97
|
+
GetFiles "./CSV", CSV_PATH '※フォルダ以下のCSVファイルパスを取得
|
98
|
+
|
99
|
+
For i = 0 To UBound(CSV_PATH)
|
100
|
+
ReadFile CSV_PATH(i), LineArrTemp '※ファイルのデータを配列に格納
|
101
|
+
If i = 0 then
|
102
|
+
LineArrM = LineArrTemp '※1ファイル目
|
103
|
+
Else
|
104
|
+
ListMerge LineArrTemp, LineArrM '※2ファイル目以降は重複をチェックしてマージ
|
105
|
+
End If
|
106
|
+
Next
|
107
|
+
|
108
|
+
WriteFile "outputText.csv", LineArrM 'ファイル出力
|
109
|
+
'<メイン処理はここまで>
|
110
|
+
|
111
|
+
|
112
|
+
'<以下はSubプロシージャ>
|
113
|
+
'===================
|
114
|
+
' ファイル書き込み
|
115
|
+
'===================
|
116
|
+
Sub WriteFile(ByVal outputPath, ByVal arr)
|
117
|
+
Dim output, i
|
118
|
+
Set output = CreateObject("ADODB.Stream")
|
119
|
+
output.Type = 2
|
120
|
+
output.Charset = "UTF-8"
|
121
|
+
output.Open
|
122
|
+
|
123
|
+
for i = 0 To UBound(arr)
|
124
|
+
output.WriteText arr(i), 1 '[0:改行なし 1:改行コード付加]
|
125
|
+
Next
|
126
|
+
output.SaveToFile outputPath, 2
|
127
|
+
output.Close
|
128
|
+
End Sub
|
129
|
+
|
130
|
+
'===================
|
131
|
+
' 重複を削除+マージ
|
132
|
+
'===================
|
133
|
+
Sub ListMerge(ByVal arrTemp, ByRef arrM)
|
134
|
+
Dim i,j
|
135
|
+
'※配列Tempで配列Mにない要素だけ配列Mに追加する
|
136
|
+
For i = 0 To UBound(arrTemp)
|
137
|
+
For j = 0 To UBound(arrM)
|
138
|
+
if arrTemp(i) <> arrM(j) then
|
139
|
+
'※配列Mにないものは追加
|
140
|
+
if UBound(arrM) = j then
|
141
|
+
redim Preserve arrM(UBound(arrM) + 1) '配列を+1拡張
|
142
|
+
arrM(UBound(arrM)) = arrTemp(i)
|
143
|
+
End If
|
144
|
+
Else
|
145
|
+
'※配列Mにあるものは追加しない
|
146
|
+
Exit For
|
147
|
+
End If
|
148
|
+
Next
|
149
|
+
Next
|
150
|
+
End Sub
|
151
|
+
|
152
|
+
'========================
|
153
|
+
' リスト取得プロシージャ
|
154
|
+
'========================
|
155
|
+
Sub GetFiles(ByVal folderPath, ByRef fileList)
|
156
|
+
Dim objFileSys
|
157
|
+
Dim objFolder
|
158
|
+
Dim objFile
|
159
|
+
Dim i
|
160
|
+
i = 0
|
161
|
+
|
162
|
+
Set objFileSys = CreateObject("Scripting.FileSystemObject")
|
163
|
+
Set objFolder = objFileSys.GetFolder(folderPath)
|
164
|
+
|
165
|
+
For Each objFile In objFolder.Files
|
166
|
+
'取得したファイルのファイル名を表示
|
167
|
+
redim Preserve fileList(i)
|
168
|
+
fileList(i) = folderPath & "/" & objFile.Name
|
169
|
+
i = i + 1
|
170
|
+
Next
|
171
|
+
|
172
|
+
Set objFolder = Nothing
|
173
|
+
Set objFileSys = Nothing
|
174
|
+
End Sub
|
175
|
+
|
176
|
+
'========================
|
177
|
+
' CSV読み込みプロシージャ
|
178
|
+
'========================
|
179
|
+
Sub ReadFile(ByVal filePath, ByRef dataList)
|
180
|
+
Dim input
|
181
|
+
Set input = CreateObject("ADODB.Stream")
|
182
|
+
input.Open
|
183
|
+
input.Type = 2
|
184
|
+
input.Charset = "UTF-8"
|
185
|
+
input.LineSeparator = 10
|
186
|
+
input.LoadFromFile filePath
|
187
|
+
|
188
|
+
'対象ファイルから1行ずつ読み込む
|
189
|
+
Dim line
|
190
|
+
Dim aryStrings
|
191
|
+
Dim i
|
192
|
+
i = 0
|
193
|
+
Do Until input.EOS
|
194
|
+
line = input.ReadText(-2)
|
195
|
+
redim Preserve dataList(i)
|
196
|
+
dataList(i) = Replace(line, vbCr, "") '改行コード削除(書込時に改行コード付加)
|
197
|
+
i = i + 1
|
198
|
+
Loop
|
199
|
+
|
200
|
+
input.Close
|
201
|
+
End Sub
|
202
|
+
|
81
203
|
```
|