WSH等でのCSVファイル操作について


[項目1]
0000,1111-11111,2222
[項目2]
3333,444-444,5555
6666,777-777,8888
[項目3]
9999,AAAA-AAAAA,BBBBB
CCCC,DDDD-DDDDDD,EEEEE
FFFF,0000-0000000,11111

あるアプリケーションから出力した、上記の様なCSVファイルがあります。
このファイルの中で、下記の様に[項目2]の2列目のみ削除し「上書き」を行いたいです。

[項目1]
0000,1111-11111,2222
[項目2]
3333,,5555
6666,,8888
[項目3]
9999,AAAA-AAAAA,BBBBB
CCCC,DDDD-DDDDDD,EEEEE
FFFF,0000-0000000,11111

元データの[項目2]の1列目は必ず4文字、2列目は必ず7文字です。
また、データがあるフォルダには複数のCSVファイルがありますが、
処理させたい物は DATA1111.CSV(名前固定)です。

・文字数で判断し削除
or
・最初のカンマから次のカンマまで削除
で行けそうでしたが、自分のスキルでは挫折してしまいました。

WSHやバッチファイル等、Windowsのエクスプローラから単体で実行可能な形式でのソースを希望します。

どなたかお解りになる方、何卒回答お願い致します。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2012/12/04 07:52:59
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:zc31s

質問者から

zc31s2012/12/04 01:32:01

スクリプト又はバッチファイルを実行したいOSは

WindowsXP SP3 or Windows7 32bit版 SP1です。

ベストアンサー

id:taknt No.2

回答回数13539ベストアンサー獲得回数1198

ポイント500pt
Dim objFSR, objTSR
Dim objFSW, objTSW

Set objFSR = CreateObject("Scripting.FileSystemObject")
Set objTSR = objFSR.OpenTextFile("DATA1111.CSV",1,0)

Set objFSW = CreateObject("Scripting.FileSystemObject")
Set objTSW = objFSW.CreateTextFile("DATA1111.CSV_bak",true)

If Err.Number > 0 Then
    WScript.Echo "Open Error"
Else
    Do Until objTSR.AtEndOfStream
        a = objTSR.ReadLine 
        if mid(a,5,1)="," and mid(a,13,1)="," then
		b= left(a,5) & right(a,len(a)-12)
		objTSW.WriteLine b
	else
		objTSW.WriteLine a
	end if
    Loop
End If


objTSW.Close
objTSR.Close

objFSR.DeleteFile "DATA1111.CSV",True
objFSW.MoveFile "DATA1111.CSV_bak","DATA1111.CSV"

Set objFSR = Nothing
Set objFSW = Nothing

その他の回答1件)

id:vocaloid-999 No.1

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

できないなら諦める それがこの世で大切なことです
まずは自分でもっと学んでみてはいかがでしょうか?

と言いましても私はスキルすらありませんがね。

id:taknt No.2

回答回数13539ベストアンサー獲得回数1198ここでベストアンサー

ポイント500pt
Dim objFSR, objTSR
Dim objFSW, objTSW

Set objFSR = CreateObject("Scripting.FileSystemObject")
Set objTSR = objFSR.OpenTextFile("DATA1111.CSV",1,0)

Set objFSW = CreateObject("Scripting.FileSystemObject")
Set objTSW = objFSW.CreateTextFile("DATA1111.CSV_bak",true)

If Err.Number > 0 Then
    WScript.Echo "Open Error"
Else
    Do Until objTSR.AtEndOfStream
        a = objTSR.ReadLine 
        if mid(a,5,1)="," and mid(a,13,1)="," then
		b= left(a,5) & right(a,len(a)-12)
		objTSW.WriteLine b
	else
		objTSW.WriteLine a
	end if
    Loop
End If


objTSW.Close
objTSR.Close

objFSR.DeleteFile "DATA1111.CSV",True
objFSW.MoveFile "DATA1111.CSV_bak","DATA1111.CSV"

Set objFSR = Nothing
Set objFSW = Nothing

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

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

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

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

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