• ベストアンサー

検索対象を変数に与えてマッチング

Rubyの初心者です。次のサンプルがマッチングできない、 書き方を教えてくださいませんか。 #!/usr/bin/env ruby key = "キーワード" while gets $_.chomp! puts $_ if $_ =~ /"#{key}"/ end puts 文を puts $_ if $_ =~ /キーワード/ に書き買えば、検索はできますが、変数に与えてマッチング することはできないでしょうか。 ご教示を宜しくお願いします。

  • Ruby
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

> puts $_ if $_ =~ /キーワード/ と同じ内容にしたいのなら、 puts $_ if $_ =~ /#{key}/ です。 > puts $_ if $_ =~ /"#{key}"/ だと、 puts $_ if $_ =~ /"キーワード"/ と同じです。

jorufii
質問者

お礼

ご回答して頂き有難う御座いました。

その他の回答 (1)

noname#207526
noname#207526
回答No.2

$_を使った書き方をしたことがありませんが、単にこれを代入するだけです。 例: val = $_ もしputsの行を変数に入れたいなら、putsせずに代入に変えます。例: val2 = $_ if ....

関連するQ&A

  • なぜRuby1.9が日本語処理できない問題

    次の簡単なRubyプログラム(test.rb)ですが、 #!/usr/bin/env ruby # -*- coding: utf-8 -*- while gets $_.chomp! tmp = $_.split(/ /) s0 = tmp[0] s1 = tmp[1] s2 = tmp[2] puts "line #{s0}\t#{s1}\t#{s2}" end 入力テキストファイル(hello.txt)は次の2行です。 1 hello, everybody! 2 皆さん、 こんにちは。 test.rb hello.txt を実行すると、Ruby 1.8.7 は問題なく正常ですが。Ruby 1.9.3は次のエラーになりました。 line 1 hello, everybody! k1.rb:7:in `split': invalid byte sequence in US-ASCII (ArgumentError) from k1.rb:7:in `<main>' 何故でしょうか。詳しい方に教えて頂けるでしょうか。 どうぞ宜しくお願いします。

    • ベストアンサー
    • Ruby
  • パターンマッチングにおいて変数を使いたい (2)

    「パターンマッチングにおいて変数を使いたい」の質問で無事解決したのですが、初心者で勉強不足で中身が理解できておりません。 新しい問題が発生しました。 標準出力では正しい結果が表示されます。しかしファイルに出力すると結果のデータが出力されません。どこが間違っているのでしょうか? また、data.csvのデータが膨大であるせいか標準出力においても、終了するまでやたらおそいです。 一瞬で該当データを表示(最終結果)してくれるのですが、その後数10分間何かの処理をした後、何も表示することなくプログラムが終了します。 この処理は何をしているのでしょうか? 高速化は可能でしょうか? open(KEY, "key.csv"); open(OUT,"> res.csv"); chomp(@keys = <KEY>); close(KEY); open(VAL, "data.csv"); while ($data = <VAL>) { chomp $data; for $key (@keys) { print OUT "$data\n" and next if $data =~ /$key/; } } close(VAL);

    • ベストアンサー
    • Perl
  • Rubyで\を\\に置換したい。

    Rubyで"\"マークを"\\"に置換しようとして、以下の様に プログラムを書きましたが、うまくいきません。 "\\aaa"となるようにするには、どうしたらよいでしょうか? %cat aa.txt \aaa %a aa.txt \aaa %cat a #!/usr/bin/ruby while l = gets print l.gsub(/\\/,'\\\\') end

  • シェバング行 envの意味

    perlとは直接関係ありませんが、シェバング行の意味が知りたいです。 #!/usr/bin/env ruby envの無い次のものはrubyを実行するという意味でわかりますが、 上のenvをつける理由が知りたいです。以下では駄目なのでしょうか? #!/usr/bin/ruby

    • ベストアンサー
    • Perl
  • Ruby初心者です。

    以下の練習問題をやっているのですが、どうもうまくいきません。 (1)担当名が"end"になる迄、担当名と売上を入力する。 (2)売上合計を求める。 (3)各担当の売上が売上合計の何%になるかの比率の計算を行う。 (4)担当名、売上、比率を表示する。 どこがいけないのがご教授頂けますでしょうか。 よろしくお願い致します。 *********************************** #! ruby -E Windows-31J:utf-8 # coding: utf-8 kensu = 0 uriage = 0 goukei = 0 uriage_t = [20] tanto = [10] tanto = [20][10] puts("担当名がendで終了") print(kensu = kensu + 1, "人目の担当名は") tanto = $stdin.gets.chomp! tanto.gsub!("\n", "") print("売上") uriage = $stdin.gets.chomp!.to_i while tanto != "end" kensu = kensu goukei = goukei + uriage uriage_t = uriage tanto_t = tanto print(kensu = kensu + 1, "人目の担当名は") tanto = $stdin.gets.chomp! tanto.gsub!("\n", "") if tanto != "end" print("売上") uriage = $stdin.gets.chomp!.to_i end end kensu = kensu + 1 goukei = goukei + uriage uriage_t = uriage tanto_t = tanto, "合計" puts "________________________________________" puts "  担当      売上  比率  " puts "________________________________________" for i in kensu kensu += i ritu = uriage * 100 / goukei puts "担当名は#{tanto} 売上は#{uriage_t}円 比率は#{ritu}%" end

  • グローバル変数を使いたいのですが。【Ruby】

    #!/usr/bin/ruby -Ke (略) $hoge = input["hoge"] def aaa() (略) end def bbb() (略) end if input["hoge"] aaa() end bbb() このように関数bbbでhtmlのフォームの値hogeを利用して 関数aaaを実行させるプログラムですが、 関数bbbで使用した変数の値をaaaでも利用したいのですが、 よい方法はあるのでしょうか? グローバル変数を$hoge = input["hoge"]の後で $hoge=[]と定義すると、初期化されてしまい、 関数bbbの中でグローバル変数を定義しても駄目でした。

  • Rubyの引数が理解できません。(初心者です)

    プログラミング言語を覚えたいと考え、諸々の事情からRubyを独学したいとおもっております。 先日、「14歳からはじめるRuby…」という本を購入し、早速勉強を始めたのですが、引数でいきなり躓いてしまいました。 以下のような例文がありましたが、原理(理屈?)が理解できません。ご教唆お願いします。 001 def syomei s 002  puts "" 003  puts "============" 004  puts "" + s 005  puts "============" 006 end 007 puts "What's your name?" 008 name = gets.chomp 009 puts "Hello," + name + "!" 010 syomei name なぜ、これでメソッドの中へ変数が引き渡されるのかが理解できません。 「008 name」で初めて出てくるnameと引数"s"が何故イコールになるのでしょうか? 例えば(全くのデタラメですが)、「010 syomei name.s」であったり「010 syomei name = s」などのように定義付けされているのであれば、納得できるのですが…。 初歩中の初歩なのはわかっているのですが、理屈を理解したいと思ってます。よろしくお願いします。

  • ruby forkについて教えて下さい

    親プロで用意した配列の中の要素を一つづつ子プロでputsした後、最後一回、親プロで生成した子プロのPIDを確認したいです。 こんなふうに書いてみました。 #!/usr/bin/ruby table=%w(a b c d) array=[] while i=table.pop do if pid=fork then array.push pid puts pid break if table.size > 0 p array else puts i end end 実行すると、以下のような結果になりました。 $9200 c 9201 b 9202 [9202] a $ PIDが一つしか得られてません。 どうしたらよいでしょうか? ご教授の程、宜しくお願いいたします。 rubyは 1.8.7 を使ってます。 以上、宜しくお願いいたします。

    • ベストアンサー
    • Ruby
  • Rubyにおける変数

    Windows2000上で、Rubyを動かしています。 皆様のお陰で、少しずつ進んでおります。しかし、また質問させてください。 変数に、ファイル名を代入して、実行すると、動かなくなりました。 実名を入れた、system('tar zxf test_20070511.tar.gz')では、動きますが、 変数にした、system('tar zxf myFilename')では、動きません。 Rubyスクリプト ---------------------- print Dir.getwd,"\n" Dir.chdir('C:\myData\myData2') print Dir.getwd,"\n" dir = Dir.open('C:\myData\myData2') while myFilename=dir.read do if /.tar.gz/i =~myFilename then puts myFilename system('tar zxf myFilename') end end dir.close ------------------------------------ 宜しくお願いいたします。

  • JavaScriptの変数にCGIの出力を入れたい。

    呼ばれると文字"a"を出力するhttp://xxx/ret_a.cgiがあるとします。 JavaScriptの中で変数hogeに、このhttp://xxx/ret_a.cgiの出力を格納するにはどうしたらよいですか? http://xxx/ret_a.cgiの内容は以下のようなかんじです。 ------------------- ここから ------------------- #!/usr/local/bin/ruby puts "Content-Type:text/html\n\n" puts "<html>\n" puts "<head><title>test1</title></head>\n" puts "<body>\n" puts "a" puts "</body></html>\n" ------------------- ここまで ------------------- puts "a"だけだと、500 Internal Server Errorになってしまうので、 上記のようにしました。