• ベストアンサー

TCL言語で文字列検索方法を教えてください。

こんにちは TCL初学者です。 romは複数出てくる場合あり。 ある配列に ******rom****** という文字列があります *:は任意の数字や文字や記号です。 romという並びを見つけたらFLAG=1 romという並びが無ければFLAG=0 のような関数を作るのはどうしたらよいでしょうか? C言語やPASCALなら読めます。 ただTCLで記述した事が無いので、想像が出来ません よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

$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とはどマイナーなものが。

masato0703
質問者

お礼

自分なりに 書いてみました。 set elem_name_len [string fist rom [get_arry Table::elem name] if {$elem_name_len > 0}{ set flag 1 } else { set flag 0 } はいかがでしょうか? あっていたら、ありがとうございます。

masato0703
質問者

補足

ご回答ありがとうございます。 配列はarrayです。 string first $rom $*******rom***** という書き方はだめですか? [get_arry Table:element name] のelement nameに*******rom*****が入っています。 いかがでしょうか?

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

regexp を使った正規表現マッチングだと、 たとえば regexp "roo?m" $str とすると、rom か room を含んでいるかどうかという 判定が可能ですが、 string firstではこれはできません。 今回検索すべきものは複雑なパターンではなく単純な文字列なので、 string first でも問題ないし、逆に固定文字列を 検索するための最適化が行われていることも 期待できるので、速度的には有利だろうということです。 string first だと、メタ文字も単なる普通の文字と 見なすだけの話ですので上述のような複雑(かもしれない)パターンで 検索するのでなければ気にすることはありません。 逆にそのようなパターンを探すのにはstringは使えません。

masato0703
質問者

お礼

大変ありがとうございました。 TCLをいろいろ見てると、Cより簡単な面もあるけど 正規表現とか、複雑ですね。 とても勉強になりました。

すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

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

masato0703
質問者

お礼

おはようございます . ^ $ [ ] * + ? | ( ) がメタ文字で、正規表現では このれらの文字の前にに¥を付けないといけない事がわかりました。 stringではメタ文字は対応しませんか? そうすると#1の書き方の方がベストでしょうか? 1/0の設定は自分でかけます。 ご指導お願いいたします。

masato0703
質問者

補足

ご回答ありがとうございます。 さっそく本日WSにてやってみます。 >正規表現マッチングだと結果が 0/1になるので#1の回答で使いましたが、 >正規表現のメタ文字がないのに正規表現マッチングをするよりは単純に検索したほうが多少は早いでしょうし。 この表現私にとって理解不能な言葉なので、噛み砕いて説明していただくと助かります。

すると、全ての回答が全文表示されます。

関連するQ&A