HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0711
medeXPでは動くのに、2000ではエラーが出る6解決


mede

リンク

2006/7/11(Tue) 16:02:37|NO.1322

XP環境で作ったときは問題なく動いている、以下のスクリプトが、


#include "hspda.as" sdim tmp,500 sdim tmp2,32,8 bload "sample.txt",tmp csvstr tmp2,tmp bload tmp2.0+".txt",tmp

Windows2000で起動すると、

#Error 12 in line 7(hsptmp)
ファイルが見つからないか無効な名前です。

というエラーがでます。
debugウインドウで配列変数の中身を調べると、
csvstrでの代入がうまくいっていないためにエラーがでていることがわかりました。
(つまり、配列変数tmp2に何も入っていない)

しかし、使用しているsample.txtというファイルの中身には問題がありませんし、
そもそも全く同じスクリプトでXP上では起動できています。

このような問題がどうして起こるのか、また解決にはどのような方法があるのか、
ご存知の方、教えていただけると幸いです。よろしくお願いいたします。



この記事に返信する


あげなす

リンク

2006/7/11(Tue) 20:40:29|NO.1324

たぶん"sample.txt"の中にある文字列のファイル名を参照して7行目のbloadで読み込むんだろうと
解釈しました。
"sample.txt"内に記述されているファイルはきちんとありますか?

>配列変数tmp2に何も入っていない
[temp2.0]のような書き方ではなく、[temp2(0)]という書き方に変えてみてもだめですか?



nao

リンク

2006/7/11(Tue) 22:13:44|NO.1327

ご返信ありがとうございます.

>たぶん"sample.txt"の中にある文字列のファイル名を参照して7行目のbloadで読み込むんだろうと
解釈しました。

その通りです.

>"sample.txt"内に記述されているファイルはきちんとありますか?

はい,それは確認いたしました.
実際,7行目を,bload "aaa"+".txt",tmp のように,
直接ファイル名を指定する形にすれば,正常に動くのです.
やはり,6行目のcsvstrがうまく動いていない気がします.

>配列変数tmp2に何も入っていない
[temp2.0]のような書き方ではなく、[temp2(0)]という書き方に変えてみてもだめですか?

それも試してみました….
書くのを忘れましたが,#include "hsp261cmp.as"を加えたり,はずしたりもしてみました.
どうしてこんなことになるんでしょうね.非常に不思議です.

なお,XPで正常動作する状態で,実行ファイルにしたものも,
マシンによって内部エラーが出たり出なかったりします.



I386

リンク

2006/7/12(Wed) 13:01:18|NO.1329

メモリー上の問題ですかねぇ…そんな気がします。
OSによってメモリー管理の方法が若干違ったりしていますので。

csvstrを使わない(つまり文字列変数配列を使わない)方法も載せておきますね。

sdim tmp,500 bload "sample.txt",tmp size=strlen (tmp) ofs=0 n=0 repeat n+1 getstr tmp2,tmp,ofs,',' ofs=ofs+strsize if ofs=size : break loop bload ""+tmp2+".txt",buf
…少々長いですが、これでも十分機能を果たしてくれますし、プラグインも不要です。
nに値を入れることによってその番号を参照してくれます。



kz3

リンク

2006/7/12(Wed) 17:02:51|NO.1332

# csvstrとcsvnoteを間違うという大ボケをかましました。改めて...

使っているHSPのバージョンはいくつですか?
空のスクリプトを実行して表示されたウィンドウのタイトルバーの文字列を教えてください。

> debugウインドウで配列変数の中身を調べると、
> csvstrでの代入がうまくいっていないためにエラーがでていることがわかりました。

hsp3.1b4 + WinXP SP2 では、csvstrの動作を以下の内容で確認できましたが、
medeさんの方( xp , 2000 )ではどうですか?

#include "hspda.as" csv = "a,b,c,d" sdim ary, strlen(csv)+1, 4 csvstr ary, csv foreach ary mes ary.cnt loop
もしこれがWin 2000でも正常に動作するなら、問題なのはファイル関連だと予想できます。



mede=nao

リンク

2006/7/13(Thu) 15:18:20|NO.1342

まず最初に、他の場所で使っているハンドル名で書き込んでしまい、
混乱させてしまったことをお詫びいたします。
今後は、naoのほうで書き込ませていただきます。

>I386さん
ありがとうございます!
書いてくださったスクリプトだと、無事に動きました!
メモリーの問題だと、私にはもう対処のしようがありません…。
あとは、プラグインの問題という可能性もあるんでしょうか。
ちゃんとhspda.dllも同じディレクトリに入れてあるのですが…。

>kz3さん

アドバイスありがとうございます。

>使っているHSPのバージョンはいくつですか?

3.0a、と表示されました。

書いてくださったスクリプトでは動きました。
さらにスクリプトを改変して、


#include "hspda.as" sdim csv,32,8 bload "sample.txt",csv sdim ary, strlen(csv)+1, 8 csvstr ary, csv foreach ary mes ary.cnt loop

としたところ、これでも動きました。
最初のスクリプトで動かない理由はさっぱりわかりませんが、
I386さんとkz3さんのスクリプトを参考にして、
なんとかこの場をしのごうと思います。

どうもありがとうございました。



kz3

リンク

2006/7/13(Thu) 17:06:59|NO.1344

>> 使っているHSPのバージョンはいくつですか?
> 3.0a、と表示されました。
> 書いてくださったスクリプトでは動きました。
3.0aにおいて、xp , 2000 どちらも動いた、と解釈して宜しいでしょうか?

> さらにスクリプトを改変して、
>
> #include "hspda.as"
> sdim csv,32,8
> bload "sample.txt",csv
> sdim ary, strlen(csv)+1, 8
> csvstr ary, csv
> foreach ary
> mes ary.cnt
> loop
>
> としたところ、これでも動きました。

ということは原因はファイル操作にあるという事が分かりました。( こうやって原因を特定していく )

で原因が分かりました。
思わぬ盲点でしたが、csvstrは要素に改行を区切りとしないため、
要素に改行が含まれることがあります。

notesel buf noteload "hsptmp" mes buf noteload {"hsptmp "} ; <=末尾に改行があると不正なファイル名 mes buf
2つ目のファイル読込みで失敗しているのはファイル名に改行が含まれているからです。
これを踏まえて外部のファイルに書かれているファイル名を取り出すときには、
改行などファイル名として使えない文字を除く必要があります。

notegetやgetstrで改行を含まない1行分の文字列を取得してからcsvstrを使うと良さそうです。



ONION software Copyright 1997-2023(c) All rights reserved.