2022-02-09 雑談 CSVミッドナイト湾岸解析伝説

1
リンク エクセルの神髄 CSVの読み込み方法|VBAサンプル集 エクセルのマクロVBAでのCSVの読込方法としては。・テキストファイルとして読み込む ・ワークブックとして読み込む ・クエリーテーブルを使う ・ADOを使う ・PowerQueryを使う 大別するとこのようになります。この記事を書いた当初は、エクセルのマクロVBAでCSVの読み込みについてネットで検索したところ、 5 users
Excel VBA Diary (OneDrive問題に挑戦中) @excelvba_diary

テキストファイルを行単位で配列に格納するときの高速コード。20万行で約10秒。 Dim fso As New FileSystemObject Dim tso As TextStream Dim csvLines() As String Set tso = fso.OpenTextFile(FilePath, ForReading) csvLines = Split(Replace(tso.ReadAll, vbCrLf, vbLf), vbLf) tso.Close

2021-11-29 17:04:39
Excel VBA Diary (OneDrive問題に挑戦中) @excelvba_diary

実はCSVファイルを行単位で配列に読み込むコード。各フィールドに改行コードが無いという前提ならこれでいける。

2021-11-29 17:09:34
ちゅん🐤 @KotorinChunChun

先日、諸事情により即興で書いたCSV読み込み関数 標準的な形式にしか対応してませんが、だからこそ高速なはず。誰か戦わせてみませんか(笑 pic.twitter.com/sFGZoB2TBG

2021-12-25 18:16:45
拡大
ちゅん🐤 @KotorinChunChun

以下の2箇所は、配列は1ベースしか許さないぜ。っていう私の強いこだわりによるハンデですwww >arr = Split(txt, ssRecordDelimiter) >ReDim Preserve arr(1 To UBound(arr) + 1) >rec = Split(arr(rr), ssFieldDelimiter) >ReDim Preserve rec(1 To UBound(rec) + 1)

2021-12-25 18:19:31
御子柴きゅう @mikoshiba_kyu

@KotorinChunChun QueryTable派。…ん?シートにじゃなくて二次元配列に…? pic.twitter.com/iRrrKCkRUs

2021-12-25 18:30:16
拡大
ちゅん🐤 @KotorinChunChun

@mikoshiba_kyu やり方はなんでもいいw ただ、QueryTableは、自分の知らないところで制御文字とか書式が変わってしまいそうで、文字列を正確に保持したい時は避ける傾向にありますね・・・

2021-12-25 18:36:48
御子柴きゅう @mikoshiba_kyu

@KotorinChunChun なるほど、完璧なパーサーとして1からハンドメイドってことすかw

2021-12-25 18:39:38
lapin @Lapin_the_First

@KotorinChunChun Line Input使うより早いですか?

2021-12-25 21:29:47
Excel VBA Diary (OneDrive問題に挑戦中) @excelvba_diary

@KotorinChunChun ReadallとSplit、条件を限定すればこれが高速ですよね。基本的に私もこれを使っています。そうじゃないCSVにはRFC準拠の正規表現で対応しています。

2021-12-25 21:36:06
ちゅん🐤 @KotorinChunChun

@Lapin_the_First 1行づつ読み込む仕組みは、どんなに頑張っても絶対に遅いです。ストレージにランダムアクセスの負荷を与えることになるので。

2021-12-25 21:46:36
ちゅん🐤 @KotorinChunChun

@excelvba_diary ですよね~。自分のVBAから出力したCSVなら形式が安定しているので、このコードで十分なんですよね。

2021-12-25 21:47:40
ほえほえ@スプシマン @hoehoe1234

@KotorinChunChun @excelvba_diary utf-8が使えないという悲しみ。どうにかしてほしい・・・。

2021-12-25 22:58:26
baoo_dev @BaooDev

@KotorinChunChun @Lapin_the_First Line InputよりはBinary読み込み+StrConv使うでしょうね。 確か、FSO使うよりこっちの方が速かったと思います。

2021-12-26 02:45:07