ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 08:20

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2008年8月31日(日) 01:19 
度々すいません。 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


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2008年8月31日(日) 10:11 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
宣言部も書いてください。da配列がString型なのかBytePtr型なのか判断に苦しみます。
使っているのはAB3ですか?AB4でも試してみてください。
Input#関数内ではちょっとした手抜き工事がされているので、そこでメモリリークしているのかもしれません。

それとトレースしてみたのですが、一度表示したらループせずに終了しているような気が。

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 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


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[19人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean