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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0203
ボブファイルの保存場所12解決


ボブ

リンク

2007/2/3(Sat) 22:08:21|NO.5401

何度もすみません
フォルダを作成する方法はわかったのですが
その作成したフォルダに
新しくファイルやフォルダを作成したいのですが
うまく作成したフォルダの中にファイルやフォルダが保存されません

やり方を知っているかたは
教えてください
よろしくお願いします



この記事に返信する


Kpan

リンク

2007/2/4(Sun) 09:11:08|NO.5410

>うまく作成したフォルダの中にファイルやフォルダが保存されません
どのようなコードを書いてできなかったのか、具体的に
スクリプトを提示してください。どこが誤っているのか
指摘しようがないので。(^^;



ボブ

リンク

2007/2/4(Sun) 12:39:20|NO.5414


dialog "",17 SAVEDIR=refstr bsave "a.dat",SAVEDIR dirlist FIRST,""+SAVEDIR if stat=0 :mkdir ""+SAVEDIR
このようなコードで失敗しました
a.datファイルをrefstrのディレクトリの中に入れたいのですが
うまくいきません
どのように直せばいいのでしょうか
よろしくお願いします



hiroki

リンク

2007/2/4(Sun) 13:46:01|NO.5415

dialog "",17 や dialog "",16 は、ファイル指定のみでフォルダの指定は出来ません。
フォルダの指定は、フォルダ選択ダイアログ命令、selfolderを使用し、既に"a.txt"が
存在するなら、bsaveではなくbcopyを使用しないといけません。



Kpan

リンク

2007/2/4(Sun) 14:16:17|NO.5417

勘違いしているのか何なのかよく分かりませんが、
dialog命令(16/17)はファイルパスを取得するためのものです。

dialog "", 17 filapath = refstr mes filapath ; フォルダパスのみ取り出した場合 dirpath = getpath (filapath, 32) mes dirpath


---

フォルダ作成、そのフォルダにファイル出力。

; 「hoge」というフォルダの有無をチェック dirlist x, "hoge", 5 ; なかったら、フォルダ作成 if stat = 0 : mkdir "hoge" ; そのフォルダにファイルを出力 data = "あいうえお" bsave "hoge\\a.dat", data



ボブ

リンク

2007/2/4(Sun) 15:38:26|NO.5419

すばやい回答ありがとうございます
えーっとあと読み込み作業もやりたいのですが
また問題が発生しました

下のコードで
プログラムを終了せずにボタンを押すと正常に
「あいうえお」と表示されるのですが
一度終了させてプログラムを再起動してからボタンを押すと
bload SAVEDIR+"\\a.dat", data
の行に対して
「パラメータの型が違いますがちがいます」という エラーが発生してしまいますなぜでしょうか
;再起動の場合削除↓
dialog "",17
SAVEDIR=refstr
dirlist FIRST,""+SAVEDIR
if stat=0 :mkdir ""+SAVEDIR
data = "あいうえお"
bsave SAVEDIR+"\\a.dat", data
;再起動の場合削除↑

button "ボタン",*aubykddi
*aubykddi
cls
bload SAVEDIR+"\\a.dat", data
mes data
stop
何度もすみませんがよろしくお願いします



英爺

リンク

2007/2/4(Sun) 19:01:06|NO.5425

ボブさん、こんにちは。
どなたもアドバイスしていないようなので、私なりに説明しますね。

ボブさんのスクリプトで、 「再起動時に削除」とあるので、素直に
その部分を削除して実行すると、SAVEDIRの変数が何も値の無いものに
なります。そのため、パラメータの型が違いますになります。

もう少し詳しく書くと、何も事前に断りなく変数を指定すると、その変数は
数値型の0がセットされます。そのため、文字列でなければならないSAVEDIRが
数値の0なので、HSPが怒ってエラーを出します。

これをクリアーするためには、SAVEDIRに必要なパスの文字を入れないといけませんね。
ボブさんは、a.datの内容をロードした訳ですから、どこにあるa.datなのかを
保存時と同じようにdialogにて指定させる必要があります。

これで解決できますか?



ボブ

リンク

2007/2/4(Sun) 21:56:43|NO.5429

回答ありがとうございます
うーん英爺さんの提案する方法は
ユーザーに起動させるたびに
ディレクトリを指定させるという方法ですね

でもそれでは私の考えているものとは別のものとなってしまいます

screen 0,50,100,0 pos 10,10 button "指定",*dokomo pos 10,50 button "ボタン",*aubykddi stop *dokomo dialog "",17 SAVEDIR=refstr dirlist FIRST,""+SAVEDIR if stat=0 :mkdir ""+SAVEDIR data = "あいうえお" bsave "aa.dat", SAVEDIR bsave SAVEDIR+"\\a.dat", data stop *aubykddi cls bload "aa.dat", SAVEDIR bload SAVEDIR+"\\a.dat", data mes data stop
だからこのように
はじめにSAVEDIRをセーブしてから
再起動時にボタンを押したときに読み込みをさせてみたのですが
これもいろいろエラーが出てうまくいきません
このコードをどうしたらいいのでしょうか



英爺

リンク

2007/2/4(Sun) 23:39:46|NO.5432

あらら、なるほどね。そんな工夫をしようとしていたんですね。

さて、ボブさんの上のスクリプトで、dialog 17(ファイル保存)を使用していますね。
このため、SAVEDIRの中身は、『C:\*****\*****\保存名』となっているはずです。
最後の保存名はフォルダー名ではありませんから、bload SAVEDIR+"\\a.dat", data
のままだと、そんなファイルはその場所にない(><)ってエラーが出ます。
直接的な対処は、最後の保存名を省く必要があります。

ボブさんが、どのような目的のものを作ろうとしているのか全て分かりませんから
上のスクリプトだけで気づいた点を書くと。

1.フォルダー選択ダイアログを出すようにした方が良いと思います。
  標準では見付からないから困っているかもしれませんね。HSPとフォルダー選択
  で掲示板やサイトを検索すると色々出てきます。
  もし、あくまで、ファルイ名を含めた操作を考えている場合は、先に書いたように
  パスだけを取得する方法を取り入れましょう。getpathをヘルプで見てください。

2.自分が実行されているカレントパスと、ファイルが存在するパスを、もう少し
  確実になるようにした方がいいと思うよ。

3.指定されたファイルが何処に保存されているかをカレントに保存する場合
  面倒でもメモリノートパッドにパスを記述して保存する方法の方が良いですよ。
  上のままだと、後ろにNUllが余計に入ってしまうから。

私からはこのくらいかな。
じゃ、頑張って!!



ボブ

リンク

2007/2/5(Mon) 16:04:13|NO.5435

何度もすみません
回答ありがとうございます
getpathを使って下のコードを作成してみたのですが
エラーが出てうまくいきません
しかもデバッグウインドウで変数の内容を調べて
見るとSAVEDIRA の内容が再起動をしなければ
『C:\*****\*****\』という風になっているのですが
再起動してからSAVEDIRAの内容が
乱数のような数字になっていることがわかりました

screen 0,600,200,0 pos 10,10 button "指定",*dokomo pos 10,50 button "ボタン",*aubykddi stop *dokomo dialog "",17 SAVEDIR=refstr SAVEDIRA=getpath(SAVEDIR,32) dirlist FIRST,""+SAVEDIR if stat=0 :mkdir ""+SAVEDIR data = "あいうえお" bsave "aa.dat", SAVEDIRA bsave SAVEDIR+"\\a.dat", data stop *aubykddi cls bload "aa.dat", SAVEDIRA bload SAVEDIRA+"\\a.dat", data mes data stop
なぜ乱数のような数字が発生してしまうのでしょうか
文章では説明しにくいので
実際に記載したコードを実行してみてください

解決方法を教えてくださいよろしくお願いします



hiroki

リンク

2007/2/5(Mon) 17:23:23|NO.5437

一応下記のように \\ を省くとエラーは出なくなります。
なぜかは、SAVEDIRの内容を見れば解ります。


bsave SAVEDIR+"a.dat", data bload SAVEDIRA+"a.dat", data

尚、dialog命令(16/17)は、中にファイルが無ければパスも取得出来ませんよ。



英爺

リンク

2007/2/5(Mon) 18:59:41|NO.5443

hirokiさんの回答でOKならそれで良いのだけど、念のため私が気になった点を
実際にスクリにしたもの付けておきますね。まだ仕事中なので細かいこと気にしないで
書いてしまってるからベストじゃないよ。考え方が合っていないかもしれないけど。
まあ、参考にしてみてね。


screen 0,600,200,0 pos 10,10 : button "指定",*dokomo pos 10,50 : button "ボタン",*aubykddi //▼カレントパスを取得 Work=dir_cur+"\\" stop *dokomo dialog "",17 if stat = 0 { dialog "キャンセルしたので終了します",0,"終了報告" end } SAVEDIR=refstr FileName=getpath(SAVEDIR,8) //パスの最後のファイル名を取り出す SAVEDIRA=getpath(SAVEDIR,32) //ファイル名を除くパスだけ取り出す SAVEDIR=SAVEDIR+"\\" //最初にゲットした全てをパスにする //▼念のため移動 chdir SAVEDIRA //▼同一フォルダーの有無確認 //dialog 17 を使用する限り、同一フォルダーのジャッジは必要無い。 //実行すれば分かるけど、同一名があればそのフォルダーを開くから。 //▼新規なら新しくフォルダー作成 mkdir FileName //▼データファイルの保存 data = "あいうえお"+":"+FileName DataBuf="" notesel DataBuf noteadd data,0 notesave FileName+"\\data.dat" dialog data+"、は『data.dat』に格納して、"+SAVEDIR+"に保存しました。" //▼カレントに、パス情報を保存 chdir Work pahtBuf="" notesel pahtBuf noteadd SAVEDIR,0 notesave "pathdata.dat" dialog "パス情報は"+Work+"の、pathdata.datに保存しました。",0,"保存報告" stop *aubykddi //▼カレントのパス情報を取得 cls chdir Work pahtBuf="" notesel pahtBuf noteload "pathdata.dat",-1 noteget SAVEDIR,0 //▼パス情報を元にデータファイルの場所を特定して取得 chdir SAVEDIR DataBuf="" notesel DataBuf noteload "data.dat",-1 noteget data,0 //▼データファイルの中身を表示 mes data stop



ボブ

リンク

2007/2/6(Tue) 16:57:10|NO.5465

回答ありがとうございます
まだ自分で改善するべきことはありますが
一応解決しましたのでおしらせします
みなさん長い間ありがとうございます
そして、これからもなにかあったらよろしくお願いします



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