なぜか4番目のファイルを読み込もうとする度にシステムエラーが出てくるのですが……
YSR 2013/7/23(Tue) 19:21:22|NO.55836
・要するに、exeと同階層のtxtファイル一覧を一旦読み込んで表示し、
「start」ボタンを押せば1ファイルづつnotegetでファイル名を切り出し
コマンドラインツールに渡し、実行が終了したことを確認して
次のファイルを渡す、といったものです。
・実行すると、3ファイル目までは上手くいくのですが、
4ファイル目(cnt = 3の時)になぜか毎回「システムエラー」の
エラーダイアログが出てきます。
・処理終了を確認してから次のファイル名を引数に渡しているので、
どこが悪いのか皆目検討がつきません。
・ソースコード:
(「A_VS11.exe」か「A_VS10.exe」が件の処理用実行ファイル。
ファイル名を引数に渡すと、cinで数字を入力するよう求めてくる。
入力して改行コードを送ると同階層にファイル出力を行い、出力し切ると終了する仕組み)
#include "hspext.as"
#packopt name "batch_split"
Splits = 100
sdim FileList, 1000 * 1000, 2
dirlist FileList(0), "*.txt", 1
if(stat != 0){
FileSum = stat
notesel FileList(0)
count = 0
repeat FileSum
noteget GetLine, cnt
if(instr(GetLine, , "ans") == -1){
FileList(1) += GetLine + "\n"
count++
}
loop
if(count == 0) :end
}
screen 0,500, 200
title "ファイル数:" + count
input Splits
pos 74,0 :objsize 426, 215 :listbox Listpos, 0, FileList(1)
pos 0, 34 :objsize 64,24
button "delete", *del
button "start", *start
stop
*del
notesel FileList(1)
notedel Listpos
count--
objprm 1, FileList(1)
title "ファイル数:" + count
stop
*start
OS = sysinfo(0)
OSVer = double(strmid(OS, -1, 3))
if((instr(OS,,"9X") != -1) | (OSVer < 6.1)) :SoftFlg = 10 :else :SoftFlg = 11
repeat count
title "状況:"+(cnt+1)+"/"+count
notesel FileList(1)
noteget FileName, cnt
pipeexec tmp, "A_VS"+SoftFlg+".exe " + FileName, 0
while
pipeget ln
if(stat == 0) : _break
if(stat == 1){
StrSplits = str(Splits)
for k, 0, strlen(StrSplits)
pipeput peek(StrSplits, k)
wait 10
next
pipeput $0D //CR
wait 10
pipeput $0A //LF
wait 10
}
wait 10
wend
wait 100
loop
end
解決策を教えて下さい。
……最悪、バッチファイルを自動生成するだけのアプリに逃げるかもしれませんが。
YSR 2013/7/23(Tue) 19:23:32|NO.55837
補足。エラー発生場所は47行目、
「noteget FileName, cnt」のところです。
noteselしてある変数の中身に異常は無いのになぜエラーを吐かれるのか……?
2013/7/23(Tue) 19:55:40|NO.55839
noteunselっていう新しい命令と規格が影響しているのかな。
GrapeColor(DION) 2013/7/24(Wed) 09:13:03|NO.55851
>> さん
noteunselは新しい命令ではなく、前からありますよ?
とりあえず、終了を確認したら1〜2秒くらい待ってみるのはどうでしょう。
GrapeColor(DION) 2013/7/24(Wed) 09:16:49|NO.55852
連投すいません。
私の頭が悪いだけかもしれませんが、説明文を読んでもイマイチどういうプログラムなのか理解できませんでした。
実行環境が再現できるファイルをまとめて圧縮ファイルにしていただくか、より詳しく説明して下さると助かります。
YSR 2013/7/24(Wed) 18:09:36|NO.55863
>終了を確認したら1〜2秒くらい待ってみる
「wait 100」で待っています。
もうちょっと増やすべきなんですかね……?
でも、このままで実行すると、
「タイトルバーのカウントが途中から急に速くなって終了。
そして、呼び出ししたソフトがエラー落ちしたとの報告ダイアログが出てくる」
という感じなんで、ウェイトを変えただけじゃ解決しないかもしれません。
>まとめて圧縮ファイルに
あいにく再配布したくない(呼び出し側のソフトを)ものでして……
一旦ここで質問は閉じさせてもらいます。返信有難う御座いました。
なまえをかくと 2013/7/25(Thu) 02:06:49|NO.55897
回答者としては、
簡単に「デバッグに必要なファイル一式圧縮して頂戴」という提案は軽率で、質問者の質問意欲を低下させる原因になりかねません。
質問者としては、
YSRさんは”初心者”ではないようですから、厳しめに回答してみます。
エラーの発生条件を特定できていないのが問題ではないでしょうか?
(特定できないから、特定してほしいという要望でしたか?)
デバッグをどの手順で行いましたか?
デバッグをどの程度のレベルで行いましたか?
エラーの原因を大別しましたか?
・HSPの仕様に問題がある
・ソースコードに問題がある
・データに問題がある
・他プログラム(レスポンス)に問題がある
など。
エラーが現れたソースコードと睨めっこしてもエラーの発生条件は特定できませんよ?
その程度はお分かりですよね。
より簡単に説明すると、
pipeexec関連の処理を止めればエラーは止まるんでしょうか?
yes->では原因はおそらくpipeexec関連の処理でしょう、と大別できます。
no->では原因はおそらくpipeexec関連の処理とは関係のないところでしょう。
つまり、
・HSPの仕様に問題がある
・ソースコードに問題がある
・データに問題がある
に絞れました。
ご自分である程度デバッグして範囲が絞れたのであるならば、
余計なコードを載せるのは相手に二度手間を踏ませることになると思わないでしょうか?
え?デバッグしていない?
論外ですね。
自分のプログラムのコーディングに集中してください。