- hoehoe1234
- 371
- 1
- 0
- 0
テキストファイルを行単位で配列に格納するときの高速コード。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実はCSVファイルを行単位で配列に読み込むコード。各フィールドに改行コードが無いという前提ならこれでいける。
2021-11-29 17:09:34先日、諸事情により即興で書いたCSV読み込み関数 標準的な形式にしか対応してませんが、だからこそ高速なはず。誰か戦わせてみませんか(笑 pic.twitter.com/sFGZoB2TBG
2021-12-25 18:16:45以下の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@KotorinChunChun QueryTable派。…ん?シートにじゃなくて二次元配列に…? pic.twitter.com/iRrrKCkRUs
2021-12-25 18:30:16@mikoshiba_kyu やり方はなんでもいいw ただ、QueryTableは、自分の知らないところで制御文字とか書式が変わってしまいそうで、文字列を正確に保持したい時は避ける傾向にありますね・・・
2021-12-25 18:36:48@KotorinChunChun ReadallとSplit、条件を限定すればこれが高速ですよね。基本的に私もこれを使っています。そうじゃないCSVにはRFC準拠の正規表現で対応しています。
2021-12-25 21:36:06@Lapin_the_First 1行づつ読み込む仕組みは、どんなに頑張っても絶対に遅いです。ストレージにランダムアクセスの負荷を与えることになるので。
2021-12-25 21:46:36@excelvba_diary ですよね~。自分のVBAから出力したCSVなら形式が安定しているので、このコードで十分なんですよね。
2021-12-25 21:47:40@KotorinChunChun @excelvba_diary utf-8が使えないという悲しみ。どうにかしてほしい・・・。
2021-12-25 22:58:26@KotorinChunChun @Lapin_the_First Line InputよりはBinary読み込み+StrConv使うでしょうね。 確か、FSO使うよりこっちの方が速かったと思います。
2021-12-26 02:45:07