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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
1020
HSP1年 PCMファイルの場所をrefstrでDat(又はtxt)に記録させたい20解決


HSP1年 PCM

リンク

2017/10/20(Fri) 19:16:33|NO.81617

HSP3.5 betaでNoteAddで選択したファイルをdatに記録したいのですが

dialog"mp3",16,"音ファイル" if stat = 1 { notesel data // インデックス0(1行目)とインデックス1(2行目)のデータを書き出す mes refstr // ファイルとして出力する notesave "music.dat" stop } if stat = 0 { mes"?" }
のどこがいけないのでしょうか。ファイルは生成されますが記録ができません。どうか
教えてください!



この記事に返信する


通りすがり

リンク

2017/10/20(Fri) 22:15:49|NO.81619

>NoteAddで
と言いつつ、コードにnoteaddが無いのだが。
とりあえずnote系統の命令を調べてみては?



HSP1年 PCM

リンク

2017/10/21(Sat) 10:08:01|NO.81620

間違えました...

*ongaku dialog"mp3",16,"音ファイル" if stat = 1 { notesel data //データを書き出す noteadd refstr,0 // ファイルとして出力する notesave "music.dat" stop } if stat = 0 { mes"?" }
でした...すみません。 



通りすがり

リンク

2017/10/21(Sat) 16:04:19|NO.81625

>ファイルは生成されますが記録ができません。
NO.81620のコードであれば記録できますよ。3.4でも3.5でも可能です。
余談ですが

dialog"mp3",16,"音ファイル"
をした時点でカレントフォルダが移動するため、ファイル名しか指定していない

notesave "music.dat"
というコードでは先にダイアログで選択したフォルダ、つまりカレントフォルダに保存されます。
少なくともnotesaveではファイル名だけでなくフォルダのパスも指定するべきかと。



さすらいの旅人

リンク

2017/10/21(Sat) 17:02:14|NO.81627

通りすがりさんのおっしゃる通り、dialog命令を実行するとその選択されたファイルがあるディレクトリがカレントディレクトリになります。

もし以前のカレントディレクトリがわかるようでしたらchdir命令でカレントディレクトリを元に戻したり、絶対パスで書くとうまくいきます。
実行ファイルのあるディレクトリなら「dir_exe」を使えます。(ただしスクリプトエディタからのデバッグだとhsp3.exeがある場所になるためエラーが起きます)

また、これはあくまで個人的な意見ですが、処理の終わりにはnoteunsel命令を使い、アンセットしておくことをお勧めします。
二重指定になると何かと誤動作があったりします。



HSP1年 PCM

リンク

2017/10/22(Sun) 15:07:15|NO.81632


*ongaku dialog"mp3",16,"音ファイル" if stat = 1 { notesel data // インデッス0(1行目)とインデックス1(2行目)のデータを書き出す chdir"system" noteadd refstr // ファイルとして出力する notesave"system\music.dat" noteunsel stop } if stat = 0 { mes"?" }
このようなソースコードではファイルがないと出るのでC:から書かないとだめなのでしょうか?



通りすがり

リンク

2017/10/22(Sun) 15:16:40|NO.81633


notesave"system\music.dat"
これだと、内部的には
notesave"カレントフォルダ\\system\music.dat"
となるわけで、カレントフォルダにsystem\music.datというファイルで保存しろということです。
とりあえず\を\\に変えましょう。
そして普通に考えて音楽を選択したフォルダの中にsystemというフォルダがあるとは考えにくいですので
ある意味当然ですね。
例えば、自分もそうですがフォルダの位置を変更している人やOSのドライブがCではない人もいるので
Cから指定すると環境によってエラーになるので
NO.81627さんの「カレントディレクトリを元に戻したり」というのをしたほうがいいかと思います。



さすらいの旅人

リンク

2017/10/22(Sun) 19:57:13|NO.81635

chdir命令は、現在のカレントから変更されます。もし「C:/a/music.mp3」というファイルを指定して開いた場合は、その時点で「C:/a/」がカレントディレクトリになります。
その後にchdir命令を使って直接「System」ディレクトリに移動していますが、この場合は「C:/a/System」にパスを移すことになります。これが原因で「ファイルが開けません」と出るのではないでしょうか。
具体的に「System」ディレクトリがどこにあるのかはわかりませんが、chdir命令をこれで理解してから修正すると違いがわかるかもしれません。


// ファイルの場所は上記と同じ場所と仮定する。 // Systemディレクトリが実行ファイルの直下にある場合 chdir dir_exe+"/system" // ディレクトリは絶対に移動しないと言うのなら chdir (絶対パス)

ちなみに、スクリプトエディタでは「\\」と2つ書いてやっと「\」として認識されます(これをエスケープシーケンスといいます)。これもきちんと指定しないとエラーが発生します。
chdir命令を行う前に、exist命令を使い存在の有無を確認するといいかもしれません。(ディレクトリの検索ができたかはわかりませんが…)

拙い文章、お許しください。



HSP1年 PCM

リンク

2017/10/22(Sun) 21:27:01|NO.81636

*ongaku
dialog"mp3",16,"音ファイル" if stat = 1 { notesel data // インデッス0(1行目)とインデックス1(2行目)のデータを書き出す chdir"system"//や(/system)(\\system)も試したが noteadd refstr // ファイルとして出力する notesave"system\\music.dat" noteunsel stop } if stat = 0 { mes"?" }
やっぱり駄目でした。今度はchdir"system"のほうが見つからないそうです。
なぜでしょう...あるのに...



暇人

リンク

2017/10/22(Sun) 21:51:23|NO.81637

どんな状況で実行してるのか
ディレクトリ構成がどうなってるのか
分からないから的確な答えは出ない

HSPエディタから実行した場合は
カレントディレクトリはソースフォルダか
起動時のカレントデイレクトリで設定されてるフォルダになる
HSPファイルを読み込んで実行してるならカレントはソースファイルのあったフォルダ
新規製作なら設定されてるフォルダ
実行ファイルなら実行ファイルのあるフォルダ

どこにsystemフォルダがあるのか分からないと何がダメなのか分からない・・・



暇人

リンク

2017/10/22(Sun) 21:59:23|NO.81638

カレントディレクトリ/system
って構成なら

>chdir"system"
で移動するならnotesaveは

notesave"music.dat"
で良い



HSP1年 PCM

リンク

2017/10/22(Sun) 22:03:34|NO.81639

デスクトップのAIメルサというフォルダの1.3.xの中の3, 1.3 といファイルにあります



暇人

リンク

2017/10/22(Sun) 22:15:54|NO.81640

>新規製作なら設定されてるフォルダ
あっと
標準エディタは 無題* のカレントディレクトリは
最後にファイル名のあるタブをアクティブにした時のソースフォルダになる(HSP3.5b5)



暇人

リンク

2017/10/22(Sun) 22:23:03|NO.81641

>NO.81639
カレントはどこになってsystemはどこ?

mes "カレント="dir_cur d="" dirlist d,"*",5 mes d
で、カレントとカレント内のディレクトリの確認が出来る



通りすがり

リンク

2017/10/22(Sun) 23:14:32|NO.81643

一先ず命令を調べたりヘルプを見たほうがいいと思います。
今回はまだ早い気がします。



HSP1年 PCM

リンク

2017/10/23(Mon) 15:09:07|NO.81650

暇人!、通りすがりさんありがとうございました。
解決できませんでした...



HSP1年 PCM

リンク

2017/10/23(Mon) 15:22:55|NO.81651

やっぱごめん、まだ終わってなかった
今度は
dialog"mp3",16,"音ファイル"
if stat = 1 {
mes dir_cur
chdir"C:\\Users\\Jon\\Desktop\\1.3\\system"
noteadd refstr
notesave"system/music.txt",1
}
if stat = 0 {
mes"?"
}
っていうソースにしたらこんどはnoteaddのところが異常な値ですと言われたのですが
どういうところがおかしいのでしょうか?



通りすがり

リンク

2017/10/23(Mon) 17:03:04|NO.81654

自分で調べたりしてますか?解決しようとしてますか?
何か自分で試してみましたか?
人に聞けば教えてもらえるから調べないと思ってませんか?
少なくとも現状では自分で解決しようとしているとは思えません。

HSPスクリプトエディタのヘルプ(F1)でnoteaddを開いてよく読んでください。
ほかにもGoogleやYahoo!で「HSP noteadd」等で調べてみていろんなサイトを読んでみてください。
なぜエラーが出るのか分かるはずです。
・・・或いは焦っていたか何かでミスをしたのかもしれませんが、何にしても
自分の書いたソースコードをよく読み何かおかしな点が無いか見ればわかりますよ。



暇人

リンク

2017/10/23(Mon) 18:38:14|NO.81655

>>NO.81651

notesel data
が、無いけど?



はなたれ

リンク

2017/10/23(Mon) 19:26:34|NO.81657

通りすがりさんが言われている通り、まずは使用している(する)命令を
HSP Document Libraryで確認。
「noteadd」命令使うにはまず「notesel」で対象バッファを指定とありますね。

ソース編集中に、なぜか「notesel ほにゃほにゃ」が消えたのでしょうね・・・

以下、抜粋箇所のみのソース動作版です(HSP Ver.3.5で確認ずみ)


// リリース時はコメントアウト #define DISP_DEBUG // mp3ファイル名を入れておく変数作成 1024は何となく sdim music_buf,1024 // メモリノートパッド命令で使用するので対象を指定 notesel music_buf // txtファイル指定しておいた // 16 : ファイルOPENダイアログ指定 dialog"txt",16,"TXTファイル" //************************************* // 戻り値確認 // stat = 0 : キャンセルかエラー // 1 : refstr(システム変数)にファイル名 //************************************* if stat = 1 { #ifdef DISP_DEBUG // 確認の為表示してみる // dir_cur : 現在のカレントディレクトリパス // refstr : 選択されたファイルパス // "\n" : エスケープシーケンスの改行表記 mes dir_cur +"\n" + refstr #endif // chdir"C:\\Users\\Jon\\Desktop\\1.3\\system" noteadd refstr notesave"music.txt" } else { mes "ファイル選択キャンセルかエラー" } // noteselで指定した対象を復帰 noteunsel #ifdef DISP_DEBUG stop // 確認表示しているのでここて停止させている #else end // 通常はこちらでプログラム終了 #endif



HSP1年 PCM

リンク

2017/10/23(Mon) 19:46:56|NO.81658

できました!ありがとうございました!暇人さん!! 通りすがりさん。



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