こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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ではソート機能を標準で持っていないため
そちらについても実装する必要があります。

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

投稿日時 - 2009-10-28 16:54:00

QNo.5403724

困ってます

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

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のファイルに出力し・・・とやっていくだけではないかと思うのですが。

投稿日時 - 2009-10-28 19:03:35

お礼

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

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

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

投稿日時 - 2009-10-30 17:12:48

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

こんにちは。

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

投稿日時 - 2009-11-01 23:17:49

お礼

ご回答ありがとうございます。
CreateObjectって色々な型を指定できるんですね。
大変参考になりました。

投稿日時 - 2009-11-02 10:10:54

あなたにオススメの質問