- ベストアンサー
CSVファイル
CSVファイルを1行ずつ比較して読み込み、一致した行を別ファイルに記述していこうと思っています。 現在、csvファイルを読み込む所まで出来ています。 比較して別ファイルに記述する方法を教えて下さい。 もしくはアドバイスください。 【ファイルの中身】 "09/09/2005 0:00:00,aaa,bbb,ccc" 【比較条件】 当日の日付を取得し、年月日だけで比較する Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\test.csv") Do while objFile.ReadLine <> "" 'IF文を記述(条件:日付) '別ファイルに記述する Loop objFile.close Set objFileSystem = Nothing Set objFile = Nothing
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>エラー:”ファイルの最後を超えた入力を行おうとしました” #2の時に書いておいても良かったんですけど、質問の内容と直接は関係ないので書きませんでしたが ファイルの入力では Do until readFile.AtEndOfStream strLine = readFile.ReadLine '処理 loop のようにAtEndOfStreamでファイルの終端に達したかどうかを調べて、 達していない間ファイル入力操作をするというのが定番です。 表記のエラーは、既にファイルの最後まで読み込んだのに、 次の読み込みをしようとしたということです。 また、 >MyString = split(objFile.ReadLine,",") のようにすると、ReadLineによって2回目の読み込みが行われてしまうので、読み込んだ後、色々操作をしようとする場合には、サンプルで示したように、変数に代入して取っておく(のを使う)のが定番です。 (もちろん、一度だけなら直接ReadLineしたものを使ってもいいんですけど)
その他の回答 (3)
- pita-gora
- ベストアンサー率70% (102/145)
質問です。補足してください。 (1)日をまたいだときはどうしますか? (2)ファイルの中身の 09/09/2005 は mm/dd/yyyy ですか dd/mm/yyyy ですか? (3) WSHを使わなくても出来そうですがWSHが必須ですか (4) ファイルの中身(test.csv)は最大何行ぐらいを想定していますか?
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>比較して 読み込んだ一行分のデータがaLineだとすると field=split(aLine,",") で、 field(0)に日付部分の文字列(09/09/2005 0:00:00)が切り出せます。 さらに、split(field(0)," ")するか left(field(0),10)で年月日部分(09/09/2005)が切り出せますので、 そこで比較します。 if left(field(0),10)="09/09/2005" then >別ファイルに記述する OpenTextFileで書き込みするファイルをオープンします。 Set objWFile=objFSO.OpenTextFile("c:\out.csv", 2, True) 出力ファイルに書き込みます objWFile.write(aLine)
補足
Dim MyDate,MonthString,DayString,YearString '今日の日付を取得 MyDate = Date - 2 ' MyDate は、現在のシステムの日付 YearString = Left(MyDate,4) MonthString = Mid(MyDate,6,2) DayString = Right(MyDate,2) Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Dim MyString Dim DateString 'DateString = MonthString & / DayString & / & YearString Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\test.csv") Do until objFile.ReadLine = "" MyString = split(objFile.ReadLine,",") if left(MyString(0),10) = "09/22/2005" then msgbox "!!!" end if Loop objFile.close これを実行すると、下記エラーが出力されるんですが、内容が良く分かりません。教えて下さい。 エラー:”ファイルの最後を超えた入力を行おうとしました”
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
「CSVファイルを1行ずつ比較して読み込み、一致した行を別ファイルに記述」という処理の内容を、まだ具体的にはお考えでないのではないかと思います。 試しに、いろいろな内容で10行ほどのサンプルファイルをいくつか作成し、手作業でその処理作業をやってみてください。 次に、その「手作業で行う作業」の詳細を書き出してみてください。その作業のことを全く何も知らない人でも、その詳細を読めば必ず同じ作業ができるという程度に細かく書いてみてください。 そうすれば、その内容をプログラムに移し変えるのは比較的容易かと思います。
補足
レスありがとうございます。 >(1)日をまたいだときはどうしますか? →日をまたぐ事はありません。該当の日の0時~23時59分59秒までです。 >(2)ファイルの中身の 09/09/2005 は mm/dd/yyyyですか →日付の形式はmm/dd/yyyyです >(3) WSHを使わなくても出来そうですがWSHが必須ですか dd/mm/yyyy ですか? →WSHを理解していないので、調べておきます。 説明を頂けると嬉しいです。 >(4) ファイルの中身(test.csv)は最大何行ぐらいを想定 していますか? →ファイル容量が10MBほどあり、Excelファイルでは全体を読み込む事が出来ないため、該当の行だけを抽出しようと思っています。 以上、このような補足で宜しかったでしょうか? 宜しくお願い致します。