ab.com コミュニティ https://www.activebasic.com/forum/ |
|
csvファイルを検索してるとメモリが足りないと・・ https://www.activebasic.com/forum/viewtopic.php?t=2468 |
ページ 1 / 1 |
作成者: | kobo [ 2008年8月31日(日) 01:19 ] |
記事の件名: | csvファイルを検索してるとメモリが足りないと・・ |
度々すいません。 csvファイルを読んでいると段々遅くなっていき、メモリが足りないと言われました。 N88の知識しか基本持っておらず、何故メモリを消費しているのか、「?」です。 どなたか知恵をお借りできませんでょうか? 1、sakuin.csv1段目にファイル名が載っているのでまず読込ます 2、それ以下の段には数値が書いてあり、変数zmと同じものが無いかしらべ、あればその上部に位置するファイル名を変数fnameに代入します。 3、別ファイルfnameを開き、配列変数daに15個一組となっている数値をファイルから取込ます。 4、3番目の数値が変数zと同じであれば、配列変数daの一部を合成して表示 5、見当たらなければファイルを閉じる と言う動きのつもりで作ってます。 コード: Open "C:sakuin.csv" For Input As #1 for x=1 to 47 Input #1,name[x] next while Eof(1)=0 for x=1 to 47 Input #1,data if zm=data then fname="C:"+name[x] Open fname For Input As #2 while Eof(2)=0 for q=1 to 15 Input #2,data da[q]=data next if da[3]=z then jusho=da[4]+da[5]+da[6] msgbox 0,jusho,"" ed=1 Exit While end if wend close #2 Exit For endif next if ed=1 then Exit while wend close #1 |
作成者: | konisi [ 2008年8月31日(日) 10:11 ] |
記事の件名: | |
宣言部も書いてください。da配列がString型なのかBytePtr型なのか判断に苦しみます。 使っているのはAB3ですか?AB4でも試してみてください。 Input#関数内ではちょっとした手抜き工事がされているので、そこでメモリリークしているのかもしれません。 それとトレースしてみたのですが、一度表示したらループせずに終了しているような気が。 |
作成者: | kobo [ 2008年8月31日(日) 23:05 ] |
記事の件名: | |
お助けありがとうございます。 AB4.24 を使用して XP SP3上で動かしています。 表示は1度だけです。該当するものが1つしかないのが解っていますので それがあるかないかを探す作業です。 ファイル名を確定後に開くファイルが300KBほどあり、小さいファイルで試すと問題なくいくのですが300KBになるとエラーを表示します。 メモリリークをしているのかもしれないとの事でINPUTで大きなデータから何かを検索するのは向かないのかもしれませんね。 以前に回答されていたように、一度ファイルを取り込んでから調査しようとしておりますが、こちらも取り込んだデータを分解していくのに速度が上がらずで思考中です。 宣言部も含め投稿します。 コード: dim data As String dim name[47] As String dim da[15] As String dim q As Long dim x As Long dim z As String dim zm As String dim ed As Long dim fname As String Open "C:sakuin.csv" For Input As #1 for x=1 to 47 Input #1,name[x] next while Eof(1)=0 for x=1 to 47 Input #1,data if zm=data then fname="C:"+name[x] Open fname For Input As #2 while Eof(2)=0 for q=1 to 15 Input #2,data da[q]=data next if da[3]=z then jusho=da[4]+da[5]+da[6] msgbox 0,jusho,"" ed=1 Exit While end if wend close #2 Exit For endif next if ed=1 then Exit while wend close #1 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |