これまでで一番「情けなかったとき」はいつですか?

こんにちは

TCL初学者です。

romは複数出てくる場合あり。

ある配列に ******rom****** という文字列があります
*:は任意の数字や文字や記号です。

romという並びを見つけたらFLAG=1
romという並びが無ければFLAG=0

のような関数を作るのはどうしたらよいでしょうか?
C言語やPASCALなら読めます。
ただTCLで記述した事が無いので、想像が出来ません
よろしくお願いします。

A 回答 (3件)

$tclsh


% set str {gasgsagsdagaromdfgagasdfgf}
gasgsagsdagaromdfgagasdfgf
% set flag 0
0
% echo $flag
0
% set flag [ regexp "rom" $str ]
1
% echo $flag
1

「配列」がTclでいうところの array なのか list なのか
わかりませんが、
ある文字列を含むかどうかは上のような判定ができます。

しかしTclとはどマイナーなものが。

この回答への補足

ご回答ありがとうございます。
配列はarrayです。

string first $rom $*******rom*****

という書き方はだめですか?

[get_arry Table:element name]
のelement nameに*******rom*****が入っています。

いかがでしょうか?

補足日時:2007/05/29 20:40
    • good
    • 0
この回答へのお礼

自分なりに
書いてみました。

set elem_name_len [string fist rom [get_arry Table::elem name]
if {$elem_name_len > 0}{
set flag 1
} else {
set flag 0
}

はいかがでしょうか?
あっていたら、ありがとうございます。

お礼日時:2007/05/29 21:08

regexp を使った正規表現マッチングだと、


たとえば
regexp "roo?m" $str
とすると、rom か room を含んでいるかどうかという
判定が可能ですが、
string firstではこれはできません。

今回検索すべきものは複雑なパターンではなく単純な文字列なので、
string first でも問題ないし、逆に固定文字列を
検索するための最適化が行われていることも
期待できるので、速度的には有利だろうということです。

string first だと、メタ文字も単なる普通の文字と
見なすだけの話ですので上述のような複雑(かもしれない)パターンで
検索するのでなければ気にすることはありません。
逆にそのようなパターンを探すのにはstringは使えません。
    • good
    • 0
この回答へのお礼

大変ありがとうございました。

TCLをいろいろ見てると、Cより簡単な面もあるけど
正規表現とか、複雑ですね。

とても勉強になりました。

お礼日時:2007/05/31 18:03

array/list の要素をすべて舐めていくかと思ったのですがちがったのですか。



正規表現マッチングだと結果が 0/1になるので#1の回答で使いましたが、
自分で1/0を設定するからどう言う値でも良いということなら、
string first のほうが良いと思います。
正規表現のメタ文字がないのに正規表現マッチングをするよりは単純に
検索したほうが多少は早いでしょうし。

この回答への補足

ご回答ありがとうございます。
さっそく本日WSにてやってみます。

>正規表現マッチングだと結果が 0/1になるので#1の回答で使いましたが、
>正規表現のメタ文字がないのに正規表現マッチングをするよりは単純に検索したほうが多少は早いでしょうし。

この表現私にとって理解不能な言葉なので、噛み砕いて説明していただくと助かります。

補足日時:2007/05/30 04:43
    • good
    • 0
この回答へのお礼

おはようございます

. ^ $ [ ] * + ? | ( )
がメタ文字で、正規表現では
このれらの文字の前にに¥を付けないといけない事がわかりました。
stringではメタ文字は対応しませんか?

そうすると#1の書き方の方がベストでしょうか?
1/0の設定は自分でかけます。

ご指導お願いいたします。

お礼日時:2007/05/30 05:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報