[ 新規に投稿する ]

文字列の改行をチェックするNo.08701
おすぎ さん 18/06/12 18:00 [ コメントを投稿する ]
お世話になっています

文字列 $text 中に改行があるか否かをチェックするマクロは
以下で良いのでしょうか?

#kaigyo = strstr($text, "\\n");

if(#kaigyo != -1) message "改行があります";

[ ]
RE:08701 文字列の改行をチェックするNo.08702
でるもんたいいじま さん 18/06/12 18:52 [ コメントを投稿する ]
  こんにちは。秀丸愛読者の「でるもんた・いいじま」です。

> 文字列 $text 中に改行があるか否かをチェックするマクロは
> 以下で良いのでしょうか?

> #kaigyo = strstr($text, "\\n");
> if(#kaigyo != -1) message "改行があります";

たぶんダメです。
1行目に "\\n" とありますが、これは「円記号そのもの+小文字のn」
という2文字の並びを表します。本当に改行をさがしたければ、
strstr( $text, "\n" ) のはずです。

☆ ☆ ☆

以下は与太話です。

細かいこと、というか好みの問題なのですが、個人的には if の中の
式は ( #kaigyo!=-1 ) よりは (#kaigyo >= 0 ) のほうが好みです。

というのも、幸いにして秀丸は必ず -1 を返しますが、strstr()
関数を実装する上での必須条件は
・見つかったときには該当位置の値を返す
・見つからなかったときは、「位置の値としてはありえない値」を返す
という2点だけなので、たとえば「必ず -2 を返す」でも「なぜ見つから
なかったのかに応じて別々の値を返す」でもいいんですね。

たとえばExcelだと、=SEARCH("d","abc") なんていう式を打ち込むと
#VALUE! が返ってきますので、これを使うときには
=IF(ISNUMBER(SEARCH("d","abc")),"あり","なし")
なんて書いたりします。
[ ]
RE:08702 文字列の改行をチェックするNo.08703
おすぎ さん 18/06/13 11:37 [ コメントを投稿する ]
  でるもんた・いいじまさん
ありがとうございます。

すみませんが、
秀丸担当さまのコメントも頂けましたら大変助かります。
よろしくお願いいたします。


>こんにちは。秀丸愛読者の「でるもんた・いいじま」です。
>
>> 文字列 $text 中に改行があるか否かをチェックするマクロは
>> 以下で良いのでしょうか?
>> 
>> #kaigyo = strstr($text, "\\n");
>> if(#kaigyo != -1) message "改行があります";
>
>たぶんダメです。
>1行目に "\\n" とありますが、これは「円記号そのもの+小文字のn」
>という2文字の並びを表します。本当に改行をさがしたければ、
>strstr( $text, "\n" ) のはずです。
>
>☆ ☆ ☆
>
>以下は与太話です。
>
>細かいこと、というか好みの問題なのですが、個人的には if の中の
>式は ( #kaigyo!=-1 ) よりは (#kaigyo >= 0 ) のほうが好みです。
>
>というのも、幸いにして秀丸は必ず -1 を返しますが、strstr()
>関数を実装する上での必須条件は
>・見つかったときには該当位置の値を返す
>・見つからなかったときは、「位置の値としてはありえない値」を返す
>という2点だけなので、たとえば「必ず -2 を返す」でも「なぜ見つから
>なかったのかに応じて別々の値を返す」でもいいんですね。
>
>たとえばExcelだと、=SEARCH("d","abc") なんていう式を打ち込むと
>#VALUE! が返ってきますので、これを使うときには
>=IF(ISNUMBER(SEARCH("d","abc")),"あり","なし")
>なんて書いたりします。
[ ]
RE:08703 文字列の改行をチェックするNo.08704
秀丸担当 さん 18/06/13 12:10 [ コメントを投稿する ]
 
でるもんたいいじまさんの言われる通り、strstr($text, "\\n")だと「\」という文字そのものと「n」を探すことになってしまうので、strstr( $text, "\n" )とするのが正しいです。

あと、判定は無い場合は仕様上-1を返すことになっているので、if( #kaigyo != -1 )で合っています。
これも、でるもんたいいじまさん言われる通りですが、if( #kaigyo >= 0 ) のほうが好みとなるのもわかります。
もし将来パラメータの追加などがあるとしたら-2が使われることがあるかもしれないですが、少なくとも現状のこの使い方では-2になることは無いので、if( #kaigyo != -1 )で間違いではないです。
[ ]
RE:08704 文字列の改行をチェックするNo.08705
おすぎ さん 18/06/13 12:15 [ コメントを投稿する ]
  秀丸担当さま

ありがとうございました。
大変参考になりました。
[ ]

[ 新規に投稿する ]