2016-06-22 6 views
0

部分文字列"print time:"を含む文字列のセクションを見つけて、データベース上のコロンの後に表示する時間で保存する必要があります。Rubyでレール4の文字列セクションを見つけて保存する方法は?

私が今まで使ってきたのはdowncaseヘルパーとincludes?ヘルパーで検索を開始しましたが、実際にその文字列内で検索を実行する方法がわかりません。

文字列のセクションを後で保存できるようにするには、どうすればよいでしょうか?

+0

あなたが知っていることは '' puts''も '' get''です。私はあなたにグーグル "ruby gets"をお勧めします:) –

+0

文字列はユーザ​​ー入力の結果ではなく、コンソールプログラムを実行しているレールの出力ですバックティックで私は文字列として出力を格納することができました。今では、その巨大な文字列の中に関連するデータを見つける必要があります。 –

+0

だから、あなたが望むものは、サブ文字列関数です。文字列関数をチェックアウトしましたか? http://ruby-doc.org/core-2.3.0/String.html –

答えて

1

/…/構文で書かれ、String#matchと一致する、regular expressionsを使用してください。

log = "username: jsmith\nprint time: 08:02:41\npower level: 9001" 
print_time = log.match(/print time:\s*([^\n]+)\s*\n/)[1] 
p print_time # => "08:02:41" 

後の任意のテキストに一致する正規表現/print time:\s*([^\n]+?)\s*\n/:周囲の空白\s*を無視して、同じ行に、および()を用いて第一の捕捉グループとして保存し、「印刷時」。その後、[1]はその最初のキャプチャグループの内容を選択します。

print_time文字列を抽出した後、必要な処理を行うことができます。たとえば、RailsモデルPrintTimeがある場合は、抽出した時刻をPrintTime.create(extracted_time: print_time)というデータベースに保存します。

+0

これは私の問題を解決できるように見えますが、文字列が 'print time:4431'のときにはどう書かれますか?実際には印刷時間は秒です。 –

+0

@JorgeCuevas私が書いた正規表現は、変更せずに引き続き動作します。フォーマットに関係なく、「印刷時間:」の後に同じ行にあるものはすべて取得されます。しかし、文字列から数値に変換するために結果に '.to_i'呼び出しを追加したいと思うかもしれません。 'print_time_in_secs = log.match(...)[1] .to_i'と同様です。 –

+0

私はそれがうまく動作していることに気付いたので、私はそれを回答とマークしました。そして、はい、 '.to_i'メソッドが必要でした。あなたの助けてくれてありがとう、この答えで多くの時間を節約しました。 –

関連する問題