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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0911
白岩 康平変数への代入が不安定です3未解決


白岩 康平

リンク

2006/9/11(Mon) 13:46:47|NO.2365

 CSV形式のファイルを読み込み、noteget 命令で1行を文字列型変数に格納し、サブルーチンに飛び、csvsel命令で文字列型の変数に展開し、さらに、配列を一つずつ別の文字列型変数に代入して、他の処理ルーチンへ飛ぶというスクリプトを書きました。
 しかし、特定の行に限って配列から別の文字列変数への代入が全くできません。
 読み込まれたファイルの書式にも、スクリプトにも一見問題はなさそうです。
 また、ルーチン内で、if命令によって取り落としの起きる行で文字列型の配列のうちの一つの要素だけでもをクリップボードに出力したりすると、ルーチンは正常に働きます。また、上記のような問題の起きるままのスクリプトから、実行型ファイルを生成すると、これまた正常に動作するのです。
 メモリーが足りなかったり処理速度のせいでタイミングを逸して取り落とし画起こっているのかなどと想像ばかりたくましくしています。
 こんなことってあるのでしょうか?
 環境は、WINDOWS-XP-SP2 、メモリ512mb、エディタはhsed3le.exe を使用しています。
 CPUは、AMD Athlon(tm) XP 2400+ 2.00 GHz です。
 あまりうまく説明できないままに長文になってしまいました。もし、質問の意図がわかりにくいようでしたら、スクリプトの一部を別途、貼り付けます。



この記事に返信する


r

リンク

2006/9/11(Mon) 18:23:06|NO.2372

自分の場合csvstrの動作が不安定だったので
下の命令で代用してます。

#define global maxCsv 50 :列の最大数 #module #deffunc csvsort array idx, val ref p=0 repeat maxCsv idx(cnt)="" getstr idx(cnt),ref,p,',' if strsize=0:break p+=strsize loop return #global



rr

リンク

2006/9/11(Mon) 18:23:28|NO.2373

自分の場合csvstrの動作が不安定だったので
下の命令で代用してます。

#define global maxCsv 50 :列の最大数 #module #deffunc csvsort array idx, val ref p=0 repeat maxCsv idx(cnt)="" getstr idx(cnt),ref,p,',' if strsize=0:break p+=strsize loop return #global



風の谷のウマシカ

リンク

2006/9/14(Thu) 18:19:19|NO.2421

>csvsel命令で文字列型の変数に展開し、さらに、配列を一つずつ別の文字列型変数に代入
と言うあたりが、よくわかりませんが、普通はrさんのようにcsvstrの使用を考えるところですね。

ですが、これが上手く行かず、別の方法を考えられた。という事のようです。

まず「HSP3.0のcsvstrは安定しないから、使わない方が良い」というのが、
複数の上級者の方の結論です。

私もやっぱり似た様な事があって、旧掲示板の方で大騒ぎして、
皆さんにご指導戴いた事があります。他にも色々と個人的な勘違いがあって、
ちょっとスレの流がわかり難くなっていて、申し訳ないです。

間違いなくおかしいのは、csvstrだけですが、hspdaのcsv系の命令には、
色々と疑義が多く、挙動がおかしければ使用を避けた方が良い様です。
「良い様です」というのは、再現性がある様な無い様な話が多いせいか、
他の方から時々上がっている相談も、少し分かり難いものが多く、
どのツリーと、どのツリーが、同じ現象を取り上げているのかも正確に特定できないせいです。

csvファイルの各セルの内容を、ひとつずつ変数に入れるのが目的なら、
rさんの方法の他に、旧掲示板の5913をご覧下さい。
naznyarkさんのモジュールと、GENKIさんがwikiに貼られたスクリプトへのリンクが
掲載されているので役に立つと思います。



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