- ベストアンサー
ADOによるCSVファイルからのデータ取得
- ADOを使用して、CSVファイルからデータを取得する方法を調査しました。
- しかし、大容量のCSVファイル(10GB以上)では途中までしかデータを取得できませんでした。
- データの取得にはレコード数などの制限があるようです。質問者は制限について教示を求めています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> CSVファイルのサイズは10GB超 これをメモリ上に展開するのは32bit Windowsの制限で無理だし、64bitだとMicrosoft.Jet.OLEDBが動かない。 いずれにしろADOでは無理。 SQLでCSVを検索したいのなら、LogParserとか。 http://www.atmarkit.co.jp/fwin2k/operation/logparser1/logparser1_01.html
その他の回答 (3)
- bin-chan
- ベストアンサー率33% (1403/4213)
> レコード数などに制限はあるのでしょうか。 停止したときのアクセスのファイルサイズは確認できますか? バージョン記載がないけど、2003までならMDB、2007以降ならACCDBファイル。 たぶん最大サイズ2GBの上限値に達していると思います。
補足
Accessは用いておりません。10数GBあるcsvファイルからそのまま、記載したマクロを 用いてデータを抽出しようと考えてました。 いずれにせよ2GBが上限なんでしょうかね。
- nda23
- ベストアンサー率54% (777/1415)
テキストファイルで、しかも容量があるなら、 ADOで読み込む理由は無いと思いますよ。 ★レコード数を知りたい場合 Dim レコード数 As Long Dim ファイル番号 As Long Dim データ As String '空いているファイル番号を取得する ファイル番号 = FreeFile 'ファイルを開く Open "~\xxx.csv" For Input As ファイル番号 'EOFになるまで行単位で読み込む Do Until EOF(ファイル番号) Line Input #ファイル番号, データ レコード数 = レコード数 + 1 Loop 'ファイルを閉じる Close ファイル番号 ★データをカンマで区切る Dim 項目配列 As Variant Dim 個別要素 As Variant 項目配列 = Split(データ, ",") For Each 個別要素 In 項目配列 Debug.Print 個別要素 Next
補足
ご回答ありがとうございます。 テキストファイルからデータの取得を行いたいと思っており、できればSQLなどを用いて、 条件にあったデータの取得や、データのグループ化などが行えればと思っています。
- nda23
- ベストアンサー率54% (777/1415)
行数調べているだけですよね? だったら普通にOpenしてLine Inputできる 回数を数えたほうが簡単ですよ。 中を見るにしても何でADOなんでしょ? 普通に読み込めばいいじゃないですか。 何か不都合がありますか?
補足
言葉足らずで申し訳ありません。 データを取得するとき、何かしらの加工を行いたいと思っており、マクロの構文中に SQL文が書けるのというお話でしたので、ADOを用いています。 Line Inputの場合、SQL文の用い方がわからなかったものです。
お礼
ご回答ありがとうございます。 集計にあたり、丸ごと展開してくれなくても良いのですが、 そういうわけにもいかないのですかね?詳しくなくてすみません。 最初の回答者にお教えいただいたとおり、Line Inputであれば、 いくら大きいファイルでもあつかえますし。 LogParserについて調べてみます。ありがとうございます。