From: Hirano Satoshi Date: 2003-05-07T15:34:30+09:00 Subject: [ruby-list:37648] マッチした部分を配列にしまう方法 こんにちは。 Rubyを使い始めて日の浅いひらのです。 現在、以下のような問題に突き当たっております。 0: あるディレクトリに、"efct******(*は英数字)"という法則性を持ったファイルが収 まっています。 1: ls のリダイレクトで、上記ファイルのリストテキストファイルを作成します。 <リストの中身例> efct000000 efct000001 efct000002 efct000003 ... 2: 作成したリストを、各行を要素として配列に読み込みます。 3: とある文書ファイルがあり、その文書のテキスト中に1でリストアップしたのと同じ ファイル名が記述されています。 <ファイルの中身例> /* < efct000000 > */ exec { ...... } /* < efct000003 > */ exec { ..... 4: 3のファイルの各行を要素として配列に読み込み、efct****** の部分だけを抜き出し て配列にしまい、かつ2で作成した配列との集合の差を取り出したいと思っていま す。その時、 done_efct_lines = 2で作成したファイル.readlines file_lines = 3の文書ファイル.readlines file_lines_shaped = [] diff_lines = [] # その1 file_lines.each { |line| if /efct\w\w\w\w\w\w/i =~ line line.gsub! (/ /,"") line.gsub! (//,"") line.gsub! (/\//,"") line.gsub! (/\*/,"") file_lines_shaped << line end } # その2 file_lines.each { |line| if /vc\w\w\w\w\w\w/i =~ line tmp = $& + "\n" file_lines_shaped << tmp end } # その3 file_lines.each { |line| line.scan(/vc\w\w\w\w\w\w/i) { |matched| matched << "\n" file_lines_shaped << matched } } diff_lines = file_lines_shaped - done_efct_lines としてやると、その2とその3ではdiff_linesの中にまんま、file_lines_shapedが収 まってしまうようなのです。 その1の時だけ、ちゃんとfile_lines_shaped中の要素からdone_efct_linesの要素が 差し引かれたものだけ収まるのですが、その2その3ではどういった部分がまずいも のなのでしょうか…。 なお、その2その3で改行コードを追加しないやり方もやってみましたが、やはりダ メでした(改行コードを入れないと、そのファイルを開いた時抽出した"efct******" が全部一つながりに(汗))。 要領を得ない聞き方で恐縮ですが、何がしかご示唆いただければ幸いです。 よろしくおねがいいたします。 ひらの