教えてください!
VB6.0で開発を行っております!
下記の様なCSV形式データを構造体を使用した配列に一括で格納する方法はないでしょうか?
CSV
1,123
2,456
3,789
Private Type TYP_TEST
A As String * 1
B As String * 3
End Type
Dim DATA(2) As TYP_TEST
っという感じで宣言した"DATA(2)"になるべくinput等でループさせずに手っ取り早く格納したい!
良い方法があれば誰か教えて下さい!
一発で格納できるステートメントは聞いたことがありませんね。|o_o;
素直にループさせながらが一番簡単だと思うのですが、ループさせると
まずいのですか?
#このあとExcelとかAccessとかに取り込むためなら、また話は別なんで
#すけどね|^-^;
KGさん御回答ありがとうございます!
現在開発中のプログラムがCSVファイルに対して頻繁にアクセスする為、迅速な処理が求められてしまうのです!
やっぱり、CSVファイルへのアクセスはOpen,Inputを使用したループ処理が妥当なんですかねー?
なるべくって言うことなら
一行読み込んで、Splitして
次の行を読み込んで、Splitして
っと言うように行数分の回数のInputはやむを得ないのではないかと。
値を読み込まなければ、処理できないから
#もし、改行コードがvbCrlfではなく、vbLFならば、
#Input一回で全部読み込まれるから、一発でできるんだけれどもね。
いなさん、御回答ありがとうございます1
うーん!やっぱり、行数分の回数のInputはやむを得ないですか!
では、処理速度の許す限りループ処理で頑張ってみます!
皆様、ありがとうございました!
以下、大容量のテキストを加工する手法として、
こうゆうやり方も、あるよってことで軽く聞き流してください。
興味を持ったら、詳細をお話いたします。
1.CSVファイルを1行のファイルに変換するような
Perl Scriptを記述する。
2.Perl ScriptをWindows上で実行できるように、Active Perl(フリー)
をインストールしておく。
3.1.で作成したPerl Scriptを実行するようなBatファイルを作成する。
例:@ConvCsv.pl %1
↑は変換元のCSVファイルを引数で引き渡せるようにする為
4. Shell関数を利用し、3で作成したBatファイルを実行する。
作成された、1行のCSVファイルをVBからOpen,Input・・・。
コレならば、Inputの回数は1回
20Mというサイズの大きなテキストファイルで実行しても
VB単体でInputを繰り返すよりは、確実に読込性能は良いです。
#T京M菱が合併しますが、ログ解析の手法は
上記のようVB + Perlでやっております。
VBでも無理やり1行として読み込めますよー
くわしくは、Input$()関数を調べてください。
ただし、CSVとして読み取るのではなく一つの文字列として読み取るので、
カンマ区切りをするための操作は自分で書かないといけませんが。
場合よっては、ADOで読み込むという手もあります。
#構造体をわざわざ自前で定義して変更のたびにメンテするのすら
#めんどくさいし
Recordsetを連想配列の代わりにしてもよいし、
GetRowsメソッドで2次元配列にするもよし、
FlexGridに格納して利用するもよし。
http://www.bcap.co.jp/hanafusa/VBHLP/adotocsv.htm
解決としてあきらめてしまった後に、たくさんの助言をありがとうございます!
皆様の助言を基にもう一度調べてみます!
本当にありがとうございました!
ツイート | ![]() |