这是我的代码
pattern = /066-\d\d\d\-\d\d\d\-\d\d\d\-\d\d\ /
Dir['c:/WurtsmithClean/DRCs/*.txt'].each do |file|
next unless File.file?(file)
File.open(file) do |f|
f.each_line do |line|
if line.match(pattern)
ln = line.match(pattern)
file.gsub!('c:/WurtsmithClean/DRCs/', '')
file.gsub!('txt', 'pdf')
puts file + "," + ln.to_s
end
end
end
end
因此,此脚本在每行的c:/ WurtsmithClean / DRCs /目录中的所有文本文档中查找匹配模式“066 - ### - ### - ### - ##”并输出文件名和匹配均以逗号分隔,用于CSV导入。
但我一直试图弄清楚如何删除匹配的重复项,因为它在同一文件名中找到多个匹配相同的数字。我希望删除这些。我尝试过使用UNIQ()方法,但它似乎只适用于数组。虽然整个输出在循环结束后在技术上是一个数组,但我不知道如何将最终输出作为数组引用并删除重复项。
以下是现在输出的示例:
066-018-400-001-00 DRC #26.pdf,066-018-400-001-00
066-018-400-001-00 DRC #26.pdf,066-018-400-001-00
066-019-100-001-00 DRC #19.pdf,066-019-100-001-00
066-019-100-001-00 DRC #19.pdf,066-019-100-001-00
066-019-100-001-00 DRC #19.pdf,066-019-100-001-00
066-019-100-001-00 DRC.pdf,066-019-100-001-00
066-020-100-001-00 DRC #20.pdf,066-020-100-001-00
066-020-100-001-00 DRC #20.pdf,066-020-100-001-00
066-020-100-001-00 DRC #20.pdf,066-020-100-001-00
066-020-100-001-00 DRC #20.pdf,066-020-100-001-00
我希望它输出像这样(无重复):
066-018-400-001-00 DRC #26.pdf,066-018-400-001-00
066-019-100-001-00 DRC #19.pdf,066-019-100-001-00
066-019-100-001-00 DRC.pdf,066-019-100-001-00
066-020-100-001-00 DRC #20.pdf,066-020-100-001-00
答案 0 :(得分:1)
您可以沿途填充阵列。然后在完成后使用uniq
。
matches = []
pattern = /066-\d\d\d\-\d\d\d\-\d\d\d\-\d\d\ /
Dir['c:/WurtsmithClean/DRCs/*.txt'].each do |file|
next unless File.file?(file)
File.open(file) do |f|
f.each_line do |line|
if line.match(pattern)
ln = line.match(pattern)
file.gsub!('c:/WurtsmithClean/DRCs/', '')
file.gsub!('txt', 'pdf')
matches << file + "," + ln.to_s
end
end
end
end
matches.uniq.each { |match| puts match }
答案 1 :(得分:1)
对于每个文件,也许你可以这样做:
首先,我会制作一个小文件进行测试:
FNAME= 'test1'
text =<<_
pig11
cat12
hat13
rat14
dog15
_
File.write(FNAME, text)
现在让我们查找匹配模式/t\d+/
的文件的第一行(比如说),然后提取数字:
pattern = /t(\d+)/
File.open(FNAME) do |f|
ln = f.find { |l| l =~ pattern }
puts "found '#{ln[pattern,1]}' in line #{ln.chomp} in file #{FNAME}" if ln
end
#=> found '12' in line cat12 in file test1