
点群データファイルより、任意の範囲の点データを取得し、
平均標高を求めるマクロを「Excel VBA」で作りました。
ただ、今回点群データファイル(CSVファイル)の改行コードが
「X,Y,Z(CR+LF)」から「X,Y,Z(LF)」に仕様変更になったため、
Line Inputステートメントで読み込めなくなりました。
Getステートメントで1バイトずつ読み込むように改変しましたが
今度は、点群データファイルの2GB制限により
「アドレスが不正です」のエラーメッセージが出てしまい、処理が中断してしまいます。
(なお、今回の解析要な点群データのファイルサイズは17GB超です。)
' バッファの初期化
strBuf = ""
Open "点群.csv" For Binary Access Read As #1
Do Until EOF(1)
Get #1, , bytCode ' ここで中断
If bytCode <> 10 Then
' LF以外の場合
strBuf = strBuf & Chr(bytCode)
Else
' LFの場合
varBuf = Split(strBuf, ",")
'
.... (解析処理)
' バッファの初期化
strBuf = ""
End If
Loop
Close #1
'
.... (解析結果を出力)
まとめると、以下の条件のファイルを高速に読み込みたいです。
1. 2GBを超えるCSVファイル
2. 改行コードがLFのみ
サンプルプログラムを教えていただければありがたいです。
よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
改行コード変換ツールを使って、一旦、LFをCRLFに変換し、
そのファイルを今まで通りの方法で処理するのは、だめなのでしょうか。
改行コードコード変換ツールの1例です。
https://www.vector.co.jp/soft/winnt/util/se40651 …
No.1
- 回答日時:
(´・ω・`) だったら1.8GBずつに分割して処理すれば良いと思うんだ。
同じ処理を10回繰り返すことになるけど、その方が回答を待つよりも早く処理が終わると思うよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBA 2千万行のCSVファイルを開きたい
Visual Basic(VBA)
-
【ExcelVBA】300万件越えCSVから条件を満たす行だけ抽出するには?
Visual Basic(VBA)
-
CSVファイルの指定列だけを読み込んでEXCELに表示したい
Excel(エクセル)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
6
Microsoft VBAで2GBを超えるファイルサイズのバイナリデータを読み込みたい。
Visual Basic(VBA)
-
7
エクセルVBA 大容量CSVファイルの読み込みが遅い
Visual Basic(VBA)
-
8
エクセルVBA 大容量CSVファイルの読み込み
Visual Basic(VBA)
-
9
【ExcelVBA】UTF-8(BOM無)でCSV保存するには?
Excel(エクセル)
-
10
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
11
VBAでシート書式の自動変換を作動させない方法
Excel(エクセル)
-
12
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
13
指定のWORKBOOKを前面表示する方法(エクセル:VBA)
Excel(エクセル)
-
14
Access 1レコードずつcsvで出力したい
その他(データベース)
-
15
VBAでCSVをExcelに取り込む時に、途中の改行を取り除くには
Visual Basic(VBA)
-
16
ダブルコーテーション付きでCSV出力
Visual Basic(VBA)
-
17
テキストファイルから改行コードを削除して読込む方法
Visual Basic(VBA)
-
18
EXCELのVBAでEOFを誤認識
Visual Basic(VBA)
-
19
VBAでの100万行以上のデータの取り込み
その他(プログラミング・Web制作)
-
20
Access VBAでタブコントロールで選択するタブをしていするには。
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DoEvents関数って何?
-
VB 電卓 メモリー機能
-
小数点を含む数値かどうか判断...
-
関数呼び出しの処理
-
win10で、正確な待ち時間の作り方
-
プログラム上のCPU稼働率低減に...
-
WindowsMessage(ウィンドウメッ...
-
VBAでリアルタイムで計算結果を...
-
VC++2010 GDIオブジェクトの解...
-
C#で書かれたプログラムをバッ...
-
Excel(VBA)でSetTimer関数を使...
-
キャッシュを意識したプログラ...
-
テキストファイルの空行をスキ...
-
VBでの簡易電卓の作成(減算方...
-
非同期プログラミングは必ずマ...
-
Excel VBAにて、2GB超の点群デ...
-
VB.NETにおける二値化処理の高速化
-
逆ポーランド記法における単項...
-
Excelでのセル内容の高速消去方法
-
Macターミナルで実行中のプログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAにて、2GB超の点群デ...
-
小数点を含む数値かどうか判断...
-
プログラム上のCPU稼働率低減に...
-
Excelでのセル内容の高速消去方法
-
DoEvents関数って何?
-
SQLの速度をあげるには・・・
-
win10で、正確な待ち時間の作り方
-
If Not c Is Nothing Then ~延...
-
絶対パスの取得について
-
VC++2010 GDIオブジェクトの解...
-
ノットイコールを教えて下さい
-
C言語:関数を使うメリットとデ...
-
あっち向いてホイのプログラム...
-
再帰呼び出しを使いますか?
-
Excel VBA データ削除の高速化
-
C#で書かれたプログラムをバッ...
-
c言語で自然数nを入力、2以上n...
-
異なるプログラミング言語を連...
-
Excel VBA での処理時間計測結...
-
再帰呼出について
おすすめ情報
tatsumaru77さん、銀鱗さん
早速の回答ありがとうございます。
作ったマクロですが、社内で共有してます。
今までは、それこそマクロボタンをワンクリックで
結果が得られるようにしてました。
そういう訳で、他の社員に対して手順が増えたことを
説明することがかなりハードルが高いです。
(結局、私が全部介入することとなり、それも困難です。)
今、CreateFileとReadFileを使ってできないか思考錯誤してますが
現状まだ上手くいってません。。。。
情報が不足していて申し訳ありません。
自己解決しました。皆さん、どうもありがうございます。
17GB超の点群データ(CSVファイル,改行コードLFのみ)でしたが
TextStreamクラスのReadLineメソッドで行単位取得ができました。
処理も1時間35分あまりで、比較的に高速処理できていると思います。
'
set objFso = CreateObject("Scripting.FileSystemObject")
set objTs = objFso.OpenTextFile(Filename:="点群.csv", IOMode:=1)
'
Do Until objTs.AtEndOfStream
varBuf = Split(objTs.ReadLine , ",")
'
.... (解析)
Loop
'
objTs = Nothing
objFso = Nothing
'
.... (結果出力)