From: rubikitch Date: 2003-08-26T16:41:25+09:00 Subject: [ruby-list:38275] Re: パターンマッチの置換について From: hogehoge@swan.syscom.ne.jp Subject: [ruby-list:38274] パターンマッチの置換について Date: Tue, 26 Aug 2003 16:07:50 +0900 るびきちです。 > 今、パターンマッチの置換で、はまっています・・・。 正規表現は難しいですね、たしかに。 おれもよくハマります。 自信がないときはirb(irbsh)で正規表現をチェックしながらスクリプトを書いてます。 > 以下の通り、TEXT1.txtの全行から、{・・・}を > 取り除いて、TEXT2.txtへ書きこみたいのですが、 > 色々他の方法を用いても、どうしても、各行の > 最初の一個しか取り除いてくれません。 んー、こちらではうまくいきますね(^^; うまくいかないテキスト例とバージョンをください。 確認したバージョンはこれらです。 ruby 1.6.6 (2001-12-26) [i586-linux] ruby 1.8.0 (2003-03-03) [i586-linux] TEXT1 = File.open("/tmp/TEXT1.txt") TEXT2 = File.open("/tmp/TEXT2.txt","w") while !TEXT1.eof line = TEXT1.gets line = line.chomp line = line.gsub(/\{.*?\}/,'') TEXT2.print(line,"\n") end TEXT2.close TEXT1.close 実行結果は、 cd /tmp/ cat /tmp/TEXT1.txt; echo --------; ruby /tmp/a.rb; cat /tmp/TEXT2.txt あいあい{あい}う{え}おえ{お}え あいあい{あい}うえおえ{お}え あいあい{あい}うえおえおえ -------- あいあいうおええ あいあいうえおええ あいあいうえおえおえ ---- もっとRubyらしく書くとこんな感じでしょうか? ブロックをつかえばclose不要です。 File.open("/tmp/TEXT1.txt") do |text1| File.open("/tmp/TEXT2.txt","w") do |text2| while !text1.eof line = text1.gets line = line.chomp line = line.gsub(/\{.*?\}/,'') text2.print(line,"\n") end end end というか、chompと行末の"\n"は不要ですね。 File.open("/tmp/TEXT1.txt") do |text1| File.open("/tmp/TEXT2.txt","w") do |text2| while !text1.eof line = text1.gets line = line.gsub(/\{.*?\}/,'') text2.print(line) end end end IO.foreach(File.foreach)を使うと行ごとに取り出せます。 File.open("/tmp/TEXT2.txt","w") do |text2| File.foreach("/tmp/TEXT1.txt") do |line| line = line.gsub(/\{.*?\}/,'') text2.print(line) end end さらに、TEXT1の内容を丸ごと読み込んで置換して書き込むこともできます。(要1.8) 俺ならこう書きます。 File.open("/tmp/TEXT2.txt","w") do |text2| text2.print File.read("/tmp/TEXT1.txt").gsub(/\{.*?\}/,'') end -- 面倒ならば、次のファイルを自分用ライブラリflib.rbなどと保存しておいて、 # flib.rb def readf(fn) File.read(fn) end class Object def writef(fn) open(fn,"w"){|f| f.write self.to_s} end end --- # スクリプト本体 require 'flib' readf("/tmp/TEXT1.txt").gsub(/\{.*?\}/,'').writef("/tmp/TEXT2.txt") のように実質一行で済ませることもできます。 それでは。 るびきち☆ http://www.rubyist.net/~rubikitch/ ←Ruby大衆化計画@移転 http://www.rubyist.net/~rubikitch/computer/irbshbook/ ←irbsh本発売