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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0826
sortで悩めるおっさんsortnoteに関して10未解決


sortで悩めるおっさん

リンク

2008/8/26(Tue) 17:23:03|NO.18698

お世話になります
HSP3.1です
下記のスクリプトで
一行目のimgフォルダのファイルによって
最下行のsortが巧くいく場合とシステムエラー1が
出る場合が有ります
imgフォルダのファイルは壊れていません
何処がおかしいのでしょうか?
足りない部分は追加しますのでよろしくお願いします


*re_start if forg=0{chdir jisin+"\\img"}else{chdir folderimg} dirlist2h 1 dirlist2 fnlistsize,"*.*",1 ;IMGファイル名GET sdim _fnlist,fnlistsize dirlist2r _fnlist notesel _fnlist fnmax=notemax ;IMGファイル数 if fnmax>0 { repeat fnmax=fnmax-1:noteget dummy,fnmax if instr(dummy,0,".")=-1 {notedel fnmax};フォルダ名カット if fnmax=0 {break} loop } fnmax=notemax if fnmax=0 { dim _fnlist dim npfnlist mes1=" jpgファイルが有りません\nフォルダを指定して下さい":goto *moto } if ddnn="N" { ;ファイル名のみでソート**************************** fno=0 repeat fnmax notesel _fnlist noteget nnn,fno nnng=getpath(nnn,8) notesel npfnlist noteadd nnng fno=fno+1 loop wait sortnote npfnlist,0



この記事に返信する


begriff

リンク

2008/8/26(Tue) 18:20:16|NO.18699

そのスクリプトはあなたの環境で動きましたか?

部分的にスクリプトを持って来るときはそれ単体で動くように加工してから
投稿するようにした方が親切ですよ。



ANTARES

リンク

2008/8/27(Wed) 00:26:44|NO.18707

 再現性の低いバグのデバッグは非常に困難です。

1 こうすれば必ずエラーになるという手順を発見する
2 その手順通りにやってエラーが出る直前に、エラーが出る命令の引数に
  使っている変数の内容をdialogかデバッグウィンドウを使って調べる。

 assert命令を使うと、好きな位置でデバッグウィンドウを表示して
止めることができます。



sortで悩めるおっさん

リンク

2008/8/27(Wed) 07:39:25|NO.18716

ご指摘有り難うございます

小生、この問題で数ヶ月悩んでおります
止まる直前のノートをファイルに書き出し
また読み込んでsortすると、動いたりします

そんなこんなでここに書かせてもらったのですが、、、、



あり

リンク

2008/8/27(Wed) 10:18:54|NO.18718

sortで悩めるおっさん>>
挙げられてるスクリプトだけでは起動も出来ないので
せめて起動からエラーが出る所までは動くスクリプトを提示してもらえませんでしょうか?
あと、エラーが出たときにソートしようとしたファイル名の一覧もあれば
チェックがしやすいです。
(量が多いのならエラーの出る最低限のものにして下さい)

そうすれば回答する側も答えやすくなると思いますよ。

自分で解決しようとするのなら
問題のあると思われる場所の命令を一つずつコメントアウト(除外)して動かし
どの命令でエラーが出るのか確認してみるのが効果的だと思います。
問題箇所がわかれば、対処の仕方もあるかと思いますので。



sortで悩めるおっさん

リンク

2008/8/27(Wed) 13:17:38|NO.18720

大変ご迷惑をおかけしております
単体で動くようにしてみました
しかし、冒頭でノートメモリを用意するとエラーになりません
スクリプトと同じところにフォルダimgとbgmを用意してjpg、mp3ファイルを適当に入れてみて下さい
組み合わせによってエラーになったりならなかったりします
エラーになるときに「BGMファイルソート」のsortnoteを;でパスするとエラーになりません
エラーになるのは最後のsortnoteです
これでエラーの再現が出来ることを祈っています
よろしくお願いします



#include "hspda.as" #include "hspext.as" goto *k789 notesel fnslist noteadd "01 芭蕉布.mp3" noteadd "02 てぃんさぐぬ花.mp3" noteadd "03 トラック 3.mp3" noteadd "03 安里屋ユンタ.mp3" noteadd "" notesel _fnlist noteadd "ooo\\dscn0002.jpg" noteadd "dscn0000.jpg" noteadd "dscn0001.jpg" noteadd "dscn0003.jpg" noteadd "dscn0004.jpg" noteadd "dscn0005.jpg" noteadd "kkk.txt" noteadd "kkk0.txt" noteadd "" *k789 jisin=dir_cur ;bgm*********************************************************** if (forg=1)&(nobgm=0){ }else{ dirlist nnng,jisin+"\\bgm" if stat=0{ nobgm=1 ;bgm無し }else{ nobgm=0 chdir jisin+"\\bgm" dirlist fnslist,"*.mp3" ;BGMファイル名GET if stat=0 {nobgm=1}else{ sortnote fnslist,0 ;BGMファイルソート fnos=1 ;BGM再生番号 notesel fnslist fnsmax=notemax ;BGMファイル数 forgbgm=0 } } } ;************************************************************** *re_start if forg=0{chdir jisin+"\\img"}else{chdir folderimg} dirlist2h 1 dirlist2 fnlistsize,"*.*",1 ;IMGファイル名GET sdim _fnlist,fnlistsize dirlist2r _fnlist notesel _fnlist fnmax=notemax ;IMGファイル数 if fnmax>0 { repeat fnmax=fnmax-1:noteget dummy,fnmax if instr(dummy,0,".")=-1 {notedel fnmax};フォルダ名カット if fnmax=0 {break} loop } fnmax=notemax ;ファイル名のみでソート**************************** fno=0 repeat fnmax notesel _fnlist noteget nnn,fno nnng=getpath(nnn,8) notesel npfnlist noteadd nnng fno=fno+1 loop wait sortnote npfnlist,0 assert end



S&R(楓)

リンク

2008/8/27(Wed) 15:49:53|NO.18728

とりあえずここまで調べた。
bgmフォルダ内に以下の名前のファイルを用意する
>noteadd "01 芭蕉布.mp3"
>noteadd "02 てぃんさぐぬ花.mp3"
>noteadd "03 トラック 3.mp3"
>noteadd "03 安里屋ユンタ.mp3"

bmgフォルダ内に以下のスクリプトを置く。

#include "hspda.as" dirlist s,"*.mp3" sortnote s sortnote s


--------------------------- Hot Soup Processor ver.3.1: hsp3.exe - アプリケーション エラー --------------------------- "0x7c9509f9" の命令が "0x524f5353" のメモリを参照しました。メモリが "read" になることはできませんでした。 プログラムを終了するには [OK] をクリックしてください --------------------------- OK ---------------------------
このようなエラーがでる。(Ctrl+C)
dirlistのファイルマスクが「*.*」だったり「*.mp4」だったりするとエラーは現れない。(見えないという意味で)
「*.mp3」であっても、bgmフォルダ内のどれか一つファイルが欠けてたりするとエラーは現れない。
4つのファイルのうち2つのファイルの拡張子を「mp4」に変えて、
mp3が2つ、mp4が2つある状態のときはエラーは現れない。
4つのファイルの拡張子をすべてを「mp4」に変え、かつファイルマスクも「*.mp4」にすると、、、
もう予想できるであろうが、上記エラーが発生する。

このことから、メモリ関係のエラーで、なおかつ直接の原因と、発生場所が離れていて
非常に特定困難なバグと思われる。

dirlist内でメモリが壊れているのか、
それによってたまたまそこにあるファイル名に含まれる
1バイトのデータによってエラーが発生するのか、もっと詳しく見ていく必要がある。

がしかし、記憶が正しければ、
sortnoteは以前不具合があり、何度か修正されてきたハズ。
その副作用の可能性もあるが、

基本的なsortnoteの使い方は、

data = "42124\n21242\n12312\n12321\n" sd_asc = data ; 昇順ソート用のデータとしてコピーする sortnote sd_asc, 0 sd_des = data ; 降順〃 sortnote sd_des
というように個別のデータを用意したほうがいい。


とえらそうなこと書いてみたけど的外れだったら赤っ恥www



S&R(楓)

リンク

2008/8/27(Wed) 15:55:36|NO.18729


sortnote sd_des, 1
ね。



あり

リンク

2008/8/27(Wed) 21:33:52|NO.18739

残念ながら私の環境ではエラーを再現出来ませんでした。(WinME2台共)
同様にS&Rさんの例も試してみましたが、やはりエラーにはなりませんでした。
ファイルの組合わせを変えてみてもエラーにならなかったので
OS等の環境依存の問題やdllが壊れている可能性もあるのかもしれません。
(エラーの出る組合わせを見つけられてないだけかもしれませんが・・・)

ですのでHSPをインストールし直してみるとか、別の環境で同じスクリプトを
試してみるという事ぐらいしか私には言えません。
お力になれず申し訳ありません。



ANTARES

リンク

2008/8/27(Wed) 23:37:52|NO.18745

 えー、一応、システムエラーを出すことには成功したものの、
問題の再現と言えるかというと、大いに疑問があるのですが、
とりあえず、以下の措置を講じると出なくなったので試してみてください。

先頭に
sdim fnslist, 2000
を追加する。



sortで悩めるおっさん

リンク

2008/8/28(Thu) 14:56:40|NO.18759

皆様、ご協力、ご指摘有り難うございます
結局
dirlistを
dirlist2に換えて
sdim fnslist,fnlistsizeでメモリを確保しました

これでもダメで
sdim fnslist,fnlistsize+2で解決しました(ホントはもう少し余裕を持たせましたが)、今のところ!!

どうやら、コマンドとファイルの組み合わせで
何かが変数を壊しているとしか、理解出来ません
これでしばらく様子を見てみます
有り難うございました



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