- ベストアンサー
if($key){ ($key eq 'aaa') || ~~を複数縦に記述したい
sub AAA {my($key)=@_; if($key){ ($key eq "aaa") || ($key eq "bbb") || ($key eq "ccc") || ($key eq "ddd") || &Error("$keyが不正です。"); } } のような形があるとして、$key eq "" の数が50個近くあるような場合、横に表示するのではなく縦に ($key eq "aaa") || ($key eq "bbb") || ($key eq "ccc") || ($key eq "ddd") || と、見栄えよく表示させたいのですが どのように記述すればよいのでしょうか。 また代替案などありましたらあわせてご教授頂けますと幸いです。
- taku0
- お礼率80% (160/199)
- Perl
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
正規表現で $key =~ /^( aaa| bbb| ccc| ddd)$/x || &Error("$keyが不正です。");
その他の回答 (2)
- osamuy
- ベストアンサー率42% (1231/2878)
自分なら、連想配列にキーとして代入しておき、目的のキーで連想配列に値があるかで判定させます。 こんな感じ: %valid_key_table = map { $_ => 1; } qw|aaa bbb ccc ddd|; &Error() unless defined $valid_key_table{ $key };
お礼
連想配列に入れておいたのを、目的のキーで値があるかを判定させるんですね。 参考になります。 mapの使い方が分かったような気がします。 ご教授頂きまして有難うございます。
- Tacosan
- ベストアンサー率23% (3656/15482)
例えば $key として有効な文字列を @validkeys という配列に入れて if (grep($_ eq $key, @validkeys)) { ... } がみやすいんじゃないでしょうか.
お礼
配列に入れておいたkeyをgrepで検索する形でも可能なんですね。そのようにも出来るとは思いませんでした。 参考にさせていただきます。有難うございました。
関連するQ&A
- 分岐SQLを一発のSQLで実現したい
【データベース:SQLServer2005】 SQLのアドバイスを頂きたいです。 【テーブル】 テーブル名:Table1 フィールド名:種類、キー1、キー2 テーブル名:Table2 フィールド名:種類、キー1、キー2 テーブル名:Table3 フィールド名:種類、キー1、キー2 【データ】 Table1 種類、キー1、キー2 001 AAA BBB 001 AAA CCC 001 AAA DDD Table2 種類、キー1、キー2 002 AAA BBB 002 AAA CCC NULL AAA DDD Table3 種類、キー1、キー2 NULL AAA BBB NULL AAA CCC NULL AAA DDD これをUNIONで取得します。 種類、キー1、キー2 001 AAA BBB 001 AAA CCC 001 AAA DDD 002 AAA BBB 002 AAA CCC NULL AAA DDD NULL AAA BBB NULL AAA CCC 実現したいのは、 1)同種類、キー1、キー2のデータで、 種類にNULLが含まれていたら、NULLのデータは取得しない 2)同種類、キー1、キー2のデータで、 種類にNULLしかないデータは、取得する 001 AAA BBB 001 AAA CCC 001 AAA DDD 002 AAA BBB 002 AAA CCC NULL AAA DDD →いる NULL AAA BBB →いらない NULL AAA CCC →いらない ↓結果 001 AAA CCC 001 AAA DDD 002 AAA BBB 002 AAA CCC NULL AAA DDD 上記を実現する為、UNION後のSQLでも構わないので、 一発のSQLで取得する事は可能でしょうか? 有識者の方にご享受頂ければ幸いです。 どうぞ宜しくお願い申し上げます。
- ベストアンサー
- SQL Server
- 正規表現で一つ目の区切り文字で区切りたいのですが・・・
aaa/bbb/ccc/ddd aaa/bbb/ccc/ddd/eee aaa/ccc/ddd $a=~/(.*)\/(.*)/; $1はそれぞれ aaa/bbb/ccc aaa/bbb/ccc/ddd aaa/ccc と成ってしまいます。 このように 「最後の/」で分けられてしまいます。 一つ目の/で分けるにはどうしたらよいでしょうか。
- ベストアンサー
- Perl
- 【エクセル】空セルを埋める方法
お世話になります。 下記のような表があります。 1行目:AAA,BBB,CCC,DDD 2行目:空セル,BBB,CCC,DDD 3行目:空セル,BBB,CCC,DDD 4行目:aaa,BBB,CCC,DDD 5行目:空セル,BBB,CCC,DDD ・・・ こんなパターンの行が結構あります。 空セル部分を下記のように埋めたいのですが 1行目:AAA,BBB,CCC,DDD 2行目:AAA,BBB,CCC,DDD 3行目:AAA,BBB,CCC,DDD 4行目:aaa,BBB,CCC,DDD 5行目:aaa,BBB,CCC,DDD てっとり早く埋める方法ありませんか? いまは、【ctrl+↓】 ⇒【↑】⇒【ctrl+D】を延々繰り返しています。 宜しくお願いいたします。
- ベストアンサー
- その他MS Office製品
- Excelの関数に詳しい方、お願いします。
わかりづらい説明かもしれませんが、よろしくお願いします。 例として、 AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF ・ ・ ・ といった文字列がエクセルの先頭列A1~A100までずらりと並んでいるとします。 各アルファベットには任意の数字(日付など)が入るとして、この並んだ百件のデータからCCCの部分の最大値を表示するための適切な関数があれば教えていただけないでしょうか? 現在少々急いでいるため言葉足らずで申し訳ありませんが、よろしくお願いいたします.
- ベストアンサー
- オフィス系ソフト
- MySQLで1つの項目に対しての集計
1つの項目内にカンマ等で区切られたデータがあります。その数を下の2種類のように集計する事って可能でしょうか? 例) KEY 項目 ----------------- 1 AAA,BBB,CCC 2 AAA,CCC 3 CCC,DDD 1) ----------------- 1 3(件) 2 2(件) 3 2(件) 2) ----------------- AAA 2(回) BBB 1(回) CCC 3(回) DDD 1(回) よろしくお願いします。
- 締切済み
- その他(データベース)
- 正規表現
正規表現 a=/home/aaa/bbb/ccc/ddd.abc echo ${a%.abc}実行したら /home/aaa/bbb/ccc/ddd が表示されますが、 home/aaa/bbb/ccc/ddd に表示したいですがうまくいきません。 ネットで正規表現さがしてみたけど理解できませんでした。 教えていただきたいです。なお 説明文も簡単に記入していただいたら幸いです。
- ベストアンサー
- その他(プログラミング・開発)
- GoogleMap API キー取得について
お世話になります。 GoogleMapをひとつのサイトで複数利用したいので、APIページでフォルダごとに申し込みました。 たとえは、 http://aaa.jp/bbb/ccc/ccc.html http://aaa.jp/bbb/ddd/ddd.html といった具合です。 GoogleMapを作るのは初めてなので、ひとつずつ確実にと、まず、ccc.htmlを作り、マーカーもインフォウインドもうまくできました。 次に、ddd.htmlのためにAPI Keyをとり貼り付けたのですが 「使用されているキーは他のウェブサイトに登録されています。このサイト用のキーを取得してください。」 と表示されます。 キー取得の注意事項に同一フォルダ内で複数ファイルには利用できないとあったのでフォルダ分けしているのですが・・・ どうしたらいいでしょうか?
- ベストアンサー
- JavaScript
- 異なるキーで取得したデータの合成
SQLに関して質問です。 以下のようなテーブルA、Bがあった場合、 【テーブルA】 カラム1 カラム2 ------------------------ AAA CCC BBB DDD 【テーブルB】 カラム3 カラム4 ------------------------ AAA 1 BBB 2 CCC 3 DDD 4 次のような結果を得るにはどのようなSQL文を記述すれば良いでしょうか? 【求める結果】 カラム1 カラム2 カラム4(1) カラム4(2) --------------------------------------------------- AAA CCC 1 3 BBB DDD 2 4 非常に初歩的な質問かもしれませんが宜しくお願いいたします。
- ベストアンサー
- Oracle
- 【ruby】subの使い方
文字列から最初の/~/までを切り取りたいです。 たとえば、"/aaa/bbb/ccc"の場合、"/aaa/"です。 そこで、subを使って以下の様に書いてみました。 puts "/aaa/bbb/ccc".sub(/(\/.*?\/)/,'\1') しかし、/aaa/bbb/cccと表示され、期待した結果が得られません。 以下の様にすると、 /(\/.*?\/)/=~"/aaa/bbb/ccc" puts $1 期待通り/aaa/が表示されるのですが、正規表現はsubのときと同じだし、 subの使い方の何が悪いのかわからなくなってしまいました。 ご指導のほど、宜しくお願いいたします。
- ベストアンサー
- Ruby
- Perlの正規表現について
Perlの正規表現について質問です. ■質問 aaa bbb aaa bbb ccc "ddd" aaa bbb ccc "ddd eee" aaa bbb ccc ddd eee "fff ggg hhh iii" というような,文字列が書かれているファイルがあるとします. ※ダブルクォーテーションが無い行もあります. ※ダブルクォーテーション内のスペースの数は,行によってそれぞれ異なります. これを,ダブルクォーテーションの中にあるスペースだけ アンダーバーに置換する場合の正規表現を教えて下さい. つまり,下記の出力にしたいです. aaa bbb aaa bbb ccc "ddd" aaa bbb ccc "ddd_eee" aaa bbb ccc ddd eee "fff_ggg_hhh_iii" ■条件 ※ちょっと古いPerlでも動くよう,ゼロ幅肯定/否定後読((?<),(!<))は使わないでください. ※単に実現するだけなら, # cat inputfile | print -pe 'sub f(){}(shift;s/ /_/;return $_;); s/(\".*\")/&f($1)/e;' みたいな感じで置換できそうですが,「正規表現だけで簡単に書けるかどうか」が知りたいのです(正規表現だけで実現出来る場合,そのアルゴリズムを知りたいです).そのため,関数と/eオプションは使わないでください.
- ベストアンサー
- Perl
お礼
正規表現を使う方法をご掲示頂けまして有難うございます。 縦に表示し簡素に見やすくて分かりやすいですね。 なるほどー。と思わされる感じで勉強になります。 有難うございました。