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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0508
まーるstrtrimで右側の改行を取り除けない2解決


まーる

リンク

2016/5/8(Sun) 18:48:07|NO.75427

HSP3.5b3にて
strtrimで右側から"\n"を(連続していても)取り除きたい
と思ったのですが、うまくいきません。

以下のスクリプトを実行すると p2=3 以外は思った通りに処理されません。
・右側からだと全く取り除かれない
・左側からは1つしか取り除かれない
という結果になります。


note = "\n\na\nb\nc\n\n" mes strf("実行前note: [%s]", note) n = $0D, $0A repeat 2 note = strtrim(note, 2, n(cnt)) ;×右側からだと、1つも改行が取れない ; note = strtrim(note, 1, n(cnt)) ;△左側からだと、1つしか改行が取れない ; note = strtrim(note, 0, n(cnt)) ;×両側からだと、左から1つしか改行が取れない ; note = strtrim(note, 3, n(cnt)) ;○全部からなら、改行が取れる loop mes strf("実行後note: [%s]", note) stop


strtrimは基本的に1バイトしか対応していないと思っていたのですが
以下のスクリプトでは、"あ"でも取り除けます。
ヘルプにも
「p3で指定する文字コードには、全角文字を示す2バイトコードを指定することができます。」
と書いてありました。
しかし、"\n"だとやはりうまくいきません。


note = "ああ\nあ\nい\nう\nえ\nああ" ;○"あ"なら取り除ける ;note = "\n\na\nb\nc\n\n" ;×"\n"でも取り除いてほしいが、うまくいかない mes strf("実行前note: [%s]", note) n = "あ" ;○"あ"なら取り除ける ;n = "\n" ;×"\n"でも取り除いてほしいが、うまくいかない b = wpeek(n) note = strtrim(note, 2, b) ;note = strtrim(note, 1, b) mes strf("実行後note: [%s]", note) stop

このような書き方でも"あ"は取り除かれるので、"\n"でも取り除いてほしいと思います。

strtrimを使わずに"\n"を取り除く他の方法はありますが、strtrimは
連続していても取り除く向きが簡単に指定できますし標準命令なので
strtrimでも幅広く対応できるようになったら、より便利で効率的な書き方ができると思いました。
よろしくお願いします。



この記事に返信する


ひろ

リンク

2016/5/8(Sun) 19:44:58|NO.75428

ん〜、あんまり自信はないけど
"\n"はキャリッジリターン(CR)とラインフィード(LF)の複合コードです。
0x0Dと0x0Aがこれらのコードになりますが全角コードには該当しないので、
1バイトで処理されているのではないでしょうか?

それと、
0 : 両端にある指定文字を除去する(デフォルト)
1 : 左端にある指定文字を除去する
2 : 右端にある指定文字を除去する
3 : 文字列内にあるすべての指定文字を除去する
2は右側のが取れないではなくてとっているけどそれ以外が残ってるだけです。
1はその逆です。
0は両端のみです。
見る限り正常な動きに見えますので命令の挙動を勘違いされているのでは?



まーる

リンク

2016/5/10(Tue) 19:58:26|NO.75445

レスありがとうございます。
見直してみたら、使い方の勘違いもあったようです。
strtrimの右側からの場合はバイト列も逆から見ないといけない
ということは分かりました。
全角空白が通るなら改行も‥と思ったのですがダメなんですね。
文字列に対応したstrtrimのような命令があってもいいなと思ったもので。



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