• ベストアンサー
  • 困ってます

VBScriptでのファイル読込について

  • 質問No.5403724
  • 閲覧数1362
  • ありがとう数3
  • 回答数2

お礼率 88% (69/78)

CSVファイル内のデータをキー項目(コード)ごとに分け、
それぞれ別のCSVファイルに出力しようとしています。
使用する言語はVBSです。
CSVファイルは以下のような形式です。
連番,コード,フラグ,日付
1,0001,A,20091001
2,0002,A,20091001
3,0002,U,20091002
4,0001,D,20091003

CSVファイルは既定の文字コード(UnicodeBE BOMなし)の形式であり、
通常のファイルを読み込むような処理では正しく
読み込むことが出来ませんでした。
(OpenTextFileメソッドの第4引数にUnicodeBEは指定できないのでは…?)
また、CSVファイル内のデータは"コード"でソートされておらず、
VBSではソート機能を標準で持っていないため
そちらについても実装する必要があります。

ファイルを取り込む際の文字コードの指定や
ソート処理について詳しい方、ご回答よろしくお願いします。

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 53% (59/110)

Scripting.FileSystemObjectではなく、ADODB.Streamを使うことでさまざまな文字コードのデータを読み込むことができます。
CSVファイルを"UnicodeBE"で作成(エディタの機能で選択)し、以下のコードを実行してみたところ、一応"連番,コード,フラグ,日付"と表示されました。
文字コードについては素人に毛が生えた程度の知識しかないので"UTF-16BE"と"UnicodeBE"が同じものなのかは分かっていません。勘違いしていたらごめんなさい。
----
Set oSt = WScript.CreateObject("ADODB.Stream")

oSt.Open
oSt.Type = 2 'バイナリ
oSt.Charset = "UTF-16BE"
oSt.LoadFromFile("be.csv")
oSt.LineSeparator = -1 'CRLF
oSt.Position = 0

sLine = oSt.ReadText(-2)
WScript.Echo sLine
----
あと、ソート機能は不要ではないのでしょうか。
読み込んだ行のキーが0001だったら0001のファイルに出力し、0002だったら0002のファイルに出力し・・・とやっていくだけではないかと思うのですが。
お礼コメント
superss28

お礼率 88% (69/78)

ご回答ありがとうございます。
返信が遅れて申し訳ありません。

"UTF-16BE"と"UnicodeBE"は同じです。
ADODB.Streamを使ってのファイル入力は初めて知りました。
教えていただいたやり方でUnicodeBEファイルの入力もうまくいきました。

私が参考にしていたサイトや参考書には載っていませんでしたね…。
回答者さんはADODB.Streamについて
どこかのサイトや参考書をご存知でしょうか?
よろしかったら教えて頂きたいです。
投稿日時:2009/10/30 17:12

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 53% (59/110)

こんにちは。

ADODB.Streamに関しては、本家本元のこちらのサイトをどうぞ
http://msdn.microsoft.com/ja-jp/library/cc364272.aspx
お礼コメント
superss28

お礼率 88% (69/78)

ご回答ありがとうございます。
CreateObjectって色々な型を指定できるんですね。
大変参考になりました。
投稿日時:2009/11/02 10:10
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ