|
|
2007/2/3(Sat) 22:08:21|NO.5401
何度もすみません
フォルダを作成する方法はわかったのですが
その作成したフォルダに
新しくファイルやフォルダを作成したいのですが
うまく作成したフォルダの中にファイルやフォルダが保存されません
やり方を知っているかたは
教えてください
よろしくお願いします
|
|
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のディレクトリの中に入れたいのですが
うまくいきません
どのように直せばいいのでしょうか
よろしくお願いします
|
|
2007/2/4(Sun) 13:46:01|NO.5415
dialog "",17 や dialog "",16 は、ファイル指定のみでフォルダの指定は出来ません。
フォルダの指定は、フォルダ選択ダイアログ命令、selfolderを使用し、既に"a.txt"が
存在するなら、bsaveではなくbcopyを使用しないといけません。
|
|
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
なぜ乱数のような数字が発生してしまうのでしょうか
文章では説明しにくいので
実際に記載したコードを実行してみてください
解決方法を教えてくださいよろしくお願いします
|
|
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
回答ありがとうございます
まだ自分で改善するべきことはありますが
一応解決しましたのでおしらせします
みなさん長い間ありがとうございます
そして、これからもなにかあったらよろしくお願いします
|
|