[ruby-list:37648] マッチした部分を配列にしまう方法

From: Hirano Satoshi <hirano@...>
Date: 2003-05-07 06:34:30 UTC
List: 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! (/\//,"")
		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******" 
が全部一つながりに(汗))。

要領を得ない聞き方で恐縮ですが、何がしかご示唆いただければ幸いです。
よろしくおねがいいたします。

ひらの 


In This Thread