簡體   English   中英

ruby比較字符串和文件內容

[英]ruby compare string with file contents

我的最終目標是將文件中的值與我要從數據庫中提取的記錄進行比較。

我有一個具有以下結構的文本文件:

123,55,66
555,99,109
324,100,800
467,200,300

然后,我從數據庫中提取記錄並逐一遍歷它們。

sth.fetch do |row|
  validate = "#{row[0]},#{row[20]},#{row[21]}"
  names = File.readlines('results.txt')
  matches = names.select { |name| name[/#{validate}/i] }
  p "Result matches as expected: #{matches}"
end

因此,validate會根據上述示例為我構建相同的格式字符串...然后,我讀取文件的所有行並將它們移至數組中,然后進行比較。 因此,這很好,它可以給我所有匹配項,但不告訴我文件中不存在的行?

所以我嘗試了

    sth.fetch do |row|
      File.open('results') do |f|
        f.each_line do |line|
          if line == validate
            puts "detail: #{line}"
          else
            puts "detail: #{validate}"
          end
        end
      end
end

但這然后讀取了每一行的每一行並進行比較,因此一半實現了我所追求的目標。

因此,我想使用我的“驗證”字符串並讀取文件的內容,以查看行是否匹配,然后打印出匹配的內容。 或者,如果我拉回一條記錄,但該記錄與文件不匹配,那么我只希望一條不匹配的消息。

謝謝

我會嘗試以下

 names = File.readlines('results.txt').map(&:chomp) 
 sth.fetch do |row|
   validate = "#{row[0]},#{row[20]},#{row[21]}"

    # for direct compare
    # if names.include?(validate)
    # Or for Regexp
    if names.grep(/#{validate}/i).any?
      p "Result matches as expected: #{matches}" 
    else
      p "Result does not matches as expected: #{matches}" 
    end  
 end

 all_matches.uniq!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM