• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ADOによるCSVファイルからのデータ取得)

ADOによるCSVファイルからのデータ取得

このQ&Aのポイント
  • ADOを使用して、CSVファイルからデータを取得する方法を調査しました。
  • しかし、大容量のCSVファイル(10GB以上)では途中までしかデータを取得できませんでした。
  • データの取得にはレコード数などの制限があるようです。質問者は制限について教示を求めています。

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

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

> CSVファイルのサイズは10GB超 これをメモリ上に展開するのは32bit Windowsの制限で無理だし、64bitだとMicrosoft.Jet.OLEDBが動かない。 いずれにしろADOでは無理。 SQLでCSVを検索したいのなら、LogParserとか。 http://www.atmarkit.co.jp/fwin2k/operation/logparser1/logparser1_01.html

983699
質問者

お礼

ご回答ありがとうございます。 集計にあたり、丸ごと展開してくれなくても良いのですが、 そういうわけにもいかないのですかね?詳しくなくてすみません。 最初の回答者にお教えいただいたとおり、Line Inputであれば、 いくら大きいファイルでもあつかえますし。 LogParserについて調べてみます。ありがとうございます。

その他の回答 (3)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.4

> レコード数などに制限はあるのでしょうか。 停止したときのアクセスのファイルサイズは確認できますか? バージョン記載がないけど、2003までならMDB、2007以降ならACCDBファイル。 たぶん最大サイズ2GBの上限値に達していると思います。

983699
質問者

補足

Accessは用いておりません。10数GBあるcsvファイルからそのまま、記載したマクロを 用いてデータを抽出しようと考えてました。 いずれにせよ2GBが上限なんでしょうかね。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

テキストファイルで、しかも容量があるなら、 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

983699
質問者

補足

ご回答ありがとうございます。 テキストファイルからデータの取得を行いたいと思っており、できればSQLなどを用いて、 条件にあったデータの取得や、データのグループ化などが行えればと思っています。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

行数調べているだけですよね? だったら普通にOpenしてLine Inputできる 回数を数えたほうが簡単ですよ。 中を見るにしても何でADOなんでしょ? 普通に読み込めばいいじゃないですか。 何か不都合がありますか?

983699
質問者

補足

言葉足らずで申し訳ありません。 データを取得するとき、何かしらの加工を行いたいと思っており、マクロの構文中に SQL文が書けるのというお話でしたので、ADOを用いています。 Line Inputの場合、SQL文の用い方がわからなかったものです。

関連するQ&A