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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
1110
tomo出力結果をテキストファイルに保存する方法13解決


tomo

リンク

2007/11/10(Sat) 15:36:27|NO.12271

質問させてください。
下記スクリプトは、

a=0 b=0 repeat 2 repeat 3 pos cnt*8,b mes a a+ loop b+18 loop stop
出力が、
012
345
になりますが、
この出力のままテキストファイルに保存するには、
どうすれば良いのかわかりませんので教えてください。
私の考えでは下記スクリプトにしたのですが、

a=0 b=0 notesel c repeat 2 repeat 3 pos cnt*8,b noteadd ""+a a+ loop b+18 loop notesave "abc.txt" end
出力が、
0
1
2
3
4
5
になってしまいました。



この記事に返信する


tks

リンク

2007/11/10(Sat) 18:42:06|NO.12276

位置をずらして表示しているだけなので、変数cには出力のとおりの文字列が
入っています。お望みの仕方で保存するには表示の仕方を変えるのがよろしいかと。

;a=0
;c="" notesel c repeat 2 b="" repeat 3 b+=""+a a+ loop noteadd b mes b loop ;mes c notesave "abc.txt"



tomo

リンク

2007/11/10(Sat) 20:30:42|NO.12288

返信ありがとうございます。
試してみたとろ、思い通りの結果でした。
スクリプトの意味を考えてみます。



tomo

リンク

2007/11/10(Sat) 22:01:23|NO.12289

解決済みにしちゃっていましたが、未解決です><
未解決に戻せないのですが、
考えてみて下記スクリプトにわからない事があったので教えてください。

;posを使っていませんが、 ;どこでmesを横書きにしているのか? ;どこで改行しているのか? ;a=0 ;c="" notesel c ; バッファを変数cに割り当てる repeat 2 ; 2回繰り返す b="" ; 変数bを文字にする repeat 3 ; 3回繰り返す b+=""+a ; bに1+""+aを加える?正しい式は?これがposの代わりの気はしますが意味はわかりません a+ ; aに+1する loop ; 2番目のrepeatに戻る noteadd b ; 行をバッファに追加する ;mes b loop ; 1番目のrepeatに戻る ;mes c notesave "abc.txt" ; バッファをabc.txtの名前で保存する
スクリプトを変えてみたのですが、
これをテキストファイルに保存するには、
どうすれば良いのか教えてください。

e=1 repeat 12 if cnt=11:color 255,0,0 pos cnt*8,0 mes e e+ if e=10:e=0 loop color a=12 b=0 d=0 randomize repeat 3 repeat a *f c=rnd(10) if c>0:pos b*8,d+23:mes c:b+ if c=0:goto*f loop a=12 b=0 d+23 loop stop
出力結果は、
123456789012
1〜9までの数字がランダムで12桁
1〜9までの数字がランダムで12桁
1〜9までの数字がランダムで12桁



tks

リンク

2007/11/10(Sat) 22:12:42|NO.12290

とりあえず前のスクリプトの説明だけ。これを見て考えてみましょう。

;a=0;aを数値型変数で初期化
;c="";cを文字列型変数で初期化 notesel c;cをメモリノートパッドに指定 repeat 2;2行分繰り返す b="";bを文字列型変数で初期化 repeat 3;3列分繰り返す b+=""+a;bに文字列としてaを加える ;(横書きにするのではなくて文字列として横に加わる) a+;aに1を加える loop noteadd b;cにbを1行として加える(ここで改行も加わる) mes b;(ここでのbは"012"か"345") loop ;mes c;(ここでのcは"0123\n345\n") notesave "abc.txt"



tks

リンク

2007/11/10(Sat) 22:13:54|NO.12291

> ;mes c;(ここでのcは"0123\n345\n")

"012\n345\n"の間違い。



tomo

リンク

2007/11/10(Sat) 22:50:47|NO.12292

返信ありがとうございます。
考えてみます。



tks

リンク

2007/11/10(Sat) 23:16:43|NO.12293

一応答え。保存用の変数を別に用意して追加してあります。
1から9のランダム部分は少し変えてあります。repeatの先頭に
戻りたいならcontinueを使ったほうがいいでしょう。

e=1
y="";追加 ;z="";追加 notesel z;追加 repeat 12 if cnt=11:color 255,0,0 pos cnt*8,0 y+=""+e;追加 mes e e+ if e=10:e=0 loop noteadd y;追加 y="";追加 color a=12 b=0 d=0 randomize repeat 3 repeat a c=rnd(9)+1 pos b*8,d+23 y+=""+c;追加 mes c b+ loop b=0 d+23 noteadd y;追加 y="";追加 loop notesave "abc.txt" stop



tomo

リンク

2007/11/11(Sun) 10:45:09|NO.12305

返信ありがとうございます。
ご指摘のcontinueを使うというのは、↓のスクリプトの事ですよね。

*f c=rnd(10) if c>0:pos b*8,d+23:mes c:b+ if c=0:goto*f ; ↑を↓に代えて、 ; if c=0:a+:continue ;こんな感じかなと思ったんですけど合いませんでした。
↑このスクリプトは、試行錯誤で、ifとgoto使っちゃったみたいな、
やり直してるスクリプトでしたが、

c=rnd(10) if c=0:goto*f if c>0:pos b*8,d+23 mes c b+
つまり、↑と同じですが、

mes c b+
は、:付けて横1行にしなくてもよかったですね。

c=rnd(9)+1 pos b*8,d+23 mes c b+
↑になるのだとは思いませんでした。
このc=rnd(9)+1に代えたところは目から鱗のような、勉強になりました。
私の本当にやりたかった事はこれだって思いました。
c=0〜8が1〜9になるんですね。
○+=``+△の意味をいまだに勉強中ですが解読してみようと思います。
親切にお聞きしてなかったところまで最善のスクリプトにしてくれてありがとうございました。



tks

リンク

2007/11/11(Sun) 13:12:19|NO.12309

○+=""+△

は書き換えると
○=○+△
です。こちらのほうがいいでしょう。



tomo

リンク

2007/11/12(Mon) 22:04:23|NO.12361

○+=""+△

は書き換えると
○=○+△
になるんですね。
ありがとうございます、勉強になりました。覚えます。



tks

リンク

2007/11/12(Mon) 23:40:54|NO.12366

いや、覚えなくてもいいです。自分で書いておいてなんですが、
意味がないというかやらないほうがよかったというか…。

もし使うとすればですが、本当は

s="test";文字列 s+="テスト";"test"+"テスト" i=3;数値 i+=5;3+5
みたいな感じで。でもこの使い方にはバグがあったような…。

○+=""+△は文字列に数値を無理やりくっつけようとしたからで、
忘れてください。



tomo

リンク

2007/11/15(Thu) 23:54:28|NO.12415

覚えなくていいという意味は、

先に、 y=""で文字列型変数にしていたから、 y+=""+eの場合、「""+」の部分は必要なかったから、 y+=eまたはy+eで良いという意味ですよね
<わかった事>

y="" notesel z ;zは文字列型変数ではなくてもよい noteadd y ;yは絶対に文字列型変数にしておかないといけない y+=""+e ;y+=eまたはy+eで良い ;別でrepeatする時にyを使いまわす場合、その都度y=""で初期化する
これでこのスクリプトに関して不明な点がなくなりました。
色々勉強でき、ありがとうございました。



tomo

リンク

2007/11/20(Tue) 20:24:18|NO.12522

NO.12293で教えてもらったスクリプトを基に、continueについて、
NO.12305で何が間違っていたのか考えてみました。
ついでに、スクリプトをいらなくても良い箇所は省き、わかりにくい箇所はわかりやすくしましてみました。
例えば、z=""を削除、y+=""+eをy+=eに変更、e+をe+=1に変更、bをcntに変更
continueをcontinue cntに変更、y+="+cをy+=cに変更、d+23をd+=23に変更などです。

e=1 y="";追加 notesel z;追加 repeat 12 if cnt=11:color 255,0,0 pos cnt*8,0 y+=e;追加 mes e e+=1 if e=10:e=0 loop noteadd y;追加 y="";追加 color a=12 randomize repeat 3 repeat a c=rnd(10) if c>0:pos cnt*8,d+23 if c=0:continue cnt y+=c;追加 mes c loop d+=23 noteadd y;追加 y="";追加 loop notesave "abc.txt" stop
こういう事だったんですね。



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