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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0619
treegetstr 不思議、教えて7解決


tree

リンク

2011/6/19(Sun) 22:02:17|NO.39749

HSP 3.2 を使っています。

Let's HSP! 講座を勉強していて、このようなのがありました。

; 区切りの切り出し
data = "AA.BBB.cccc"

i = 0
repeat
getstr kekka, data, i, '.'
if strsize = 0 : break
mes ""+kekka+" ["+i+"]
i += strsize
loop

mes "終わり!"
stop

結果は "AA[0]:BBB[1]:cccc[2]:終わり!" となります。

ところが、
data = "AA\BBB\cccc"
をこう変えて、切り出し区切り文字を '\\' に変えると、

結果は "AAbBBcccc : 終わり!"
となります。 '\' これの使用の不可は納得いけるにしても、
BBB が bBB となるのは不思議です。

これは仕様ですか?
こんなことはしていけないということでしょうか?



この記事に返信する


test

リンク

2011/6/19(Sun) 23:33:56|NO.39752

変数dataを表示してみましょう。
AAbBBcccc
となるはずです。これを文字"\"で区切ろうとしているので、このような動作になるのは当然といえます。
treeさんは、区切り文字を'\'ではなく'\\'と書きました。これは\がエスケープ文字であるから、\という文字そのものを使うには二重にして\\というようにしないといけないからです。今回の場合、\B がbに、\cはそのままcになったようです。 それは、普通の文字列中で使うときも同じです。つまり、
data = "AA\\BBB\\cccc"
とすれば、期待した動作が得られるはずです。



Taddi

リンク

2011/6/19(Sun) 23:48:44|NO.39753

これは仕様だと思った方がよいと思います。
プログラミングマニュアルの3-7「文字列」にあるように
「\」は特殊な意味を持つキャラクタとして解釈されます。

文字列変数内での\はその後の1文字と結びつきます。
今回はたまたま解釈する文字がなく、大文字が小文字になりました
…これについては「なぜか」は分りかねます(*_*

しかしマニュアルにあるように、
「n」「t」「r」などが含まれる場合は違う挙動をしてしまいます。

それを回避するには、
dataの内容をメモ帳などを使って「\」で区切って書き込んで
ファイル名を付けて保存しておき、
bloadなどでそのファイルを読み込めば、
treeさんのスクリプトで正しく動くと思います。



ORZ

リンク

2011/6/19(Sun) 23:51:16|NO.39754

俺からすれば入力欄のすぐ上にある<pre>〜</pre>の存在に気づかない不届き者が
一向に減らないことの方が不思議だ。



tree

リンク

2011/6/20(Mon) 08:50:46|NO.39760

testさん Taddiさん 説明ありがとうございます。だいたい納得は出来ました。
しかし、また悩みが出ました。

ファイルに書いたものをbload で読み込むと、私が期待したように文字が分離できる
のを確認しました。bload で読み込んだ文はプログラム中の文とは異なる印でも付いている
のでしょうか? 印が付いていると挙動が違うのでしょうか? 印はどうやって見分けるの
でしょうか?

ORZさん文章は私には理解できませんが、プログラム中の文には何か印があるという意味で
しょうか? 私には読めませんが。

よろしくお願いします。



ひらまる

リンク

2011/6/20(Mon) 09:12:47|NO.39762

>プログラム中の文には何か印があるという意味でしょうか?
この掲示板の入力欄の上にある、
1.不要部分の多い長いスクリプトの投稿は ご遠慮ください。
2.自動改行されません。適度に改行を入れてください。
3.スクリプトは小文字の
で囲んでください。
って奴ですよー ホームページつくったりしたことある人は、<br>が面倒だから<pre>を使った人も多いはず…w



ひらまる

リンク

2011/6/20(Mon) 10:40:16|NO.39763

すみません今気づきました。
3.スクリプトは小文字の<pre>〜</pre>で囲んでください。
ですね;



tree

リンク

2011/6/20(Mon) 17:29:53|NO.39766

私の文に 〜 が入っていませんでした。 
申し訳ありません。

皆さん、隅から隅までご指導ありがとうございました。



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