点群データファイルより、任意の範囲の点データを取得し、
平均標高を求めるマクロを「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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA CSV取り込みについて 3 2021/12/30 22:40
- Access(アクセス) accessでexcelデータを一部変換してインポートするVBAコードを教えてください。 2 2021/12/14 08:31
- Visual Basic(VBA) Excel VBAでフォルダ内の全テキストファイルの任意データを取得について 7 2021/12/18 16:00
- Visual Basic(VBA) csvファイルを列数ごとに分割するExcelマクロが書けずに困っています 8 2023/10/09 12:12
- Visual Basic(VBA) VBA 毎日取得するデータを反映させる方法 の応用 2 2023/09/05 16:32
- Visual Basic(VBA) 【VBA】エクセルで値のみクリップボードにコピーするコードについて(貼り付け時の空白削除) 3 2023/09/06 23:37
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) Excelでセル内の一部のみ同じセルを検索し、そのセルと同じ行で任意の列のセルを選択する方法 2 2021/12/17 11:01
- Visual Basic(VBA) 転記先VBA 一致しているセルがコピーされない 5 2021/11/15 17:23
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Chat GPTに、課題として、二と...
-
異なるプログラミング言語を連...
-
win10で、正確な待ち時間の作り方
-
SQLの速度をあげるには・・・
-
絶対パスの取得について
-
エクセルVBAで教えて頂きたいの...
-
減色処理について
-
小数点を含む数値かどうか判断...
-
C#で書かれたプログラムをバッ...
-
基本情報技術者試験詳しい方へ...
-
【C言語 数独】 C言語で9×9の数...
-
fortranを動かす最速なパソコン...
-
あっち向いてホイのプログラム...
-
膨大データ処理を高速化したい
-
Excelでのセル内容の高速消去方法
-
DoEvents関数って何?
-
VBでの簡易電卓の作成(減算方...
-
プログラム 擬似コードとはどん...
-
ノットイコールを教えて下さい
-
プログラミングで6桁の数字を桁...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでのセル内容の高速消去方法
-
DoEvents関数って何?
-
win10で、正確な待ち時間の作り方
-
小数点を含む数値かどうか判断...
-
Excel VBAにて、2GB超の点群デ...
-
SQLの速度をあげるには・・・
-
絶対パスの取得について
-
WebBrowserの読み込み待ちの処...
-
プログラム上のCPU稼働率低減に...
-
C言語 再帰処理のメリットとデ...
-
テキストファイルの空行をスキ...
-
実行時のCPU使用率を増やしたい
-
C言語 時刻差分の算出方法
-
Excel VBA データ削除の高速化
-
VBでの簡易電卓の作成(減算方...
-
Excel(VBA)でSetTimer関数を使...
-
プログラミングの授業でPython...
-
If Not c Is Nothing Then ~延...
-
C言語で、文字とか入力されなく...
-
C言語:関数を使うメリットとデ...
おすすめ情報
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
'
.... (結果出力)