簡體   English   中英

讀取文件並驗證Ruby中的行

[英]Read file and validate rows in Ruby

我有一個CSV文件,如下所示

ID      Required  -- these are headers
SD0005   Yes      -- row information

我必須針對標題驗證每一行。 說出ID包含字母和數字,且長度不得超過6。要求的標頭在每一行中應為yes或no。

如果必須處理性能超過1000行的巨大文件,如何在Ruby中實現此功能?

我正在讀取每個標題的特定行,如下所示

CSV.foreach('file path', :headers => true) do |csv_obj| 
csv_obj['ID'] 
csv_obj['Required']

有沒有辦法知道在針對行的標題驗證列時哪個條件失敗。 我需要知道失敗的原因並打印出來

紅寶石的新手。 感謝幫助

要從CSV文件將數據導入Ruby,請嘗試以下操作:

# This will read the data in with headers, convert the column names to symbols, 
# and then turn each resulting CSV::Row instance into a hash

data = CSV.read('temp.csv', headers: true, header_converters: :symbol).map(&:to_h)

這應該返回以下內容:

=> [{:id=>"SD0005", :required=>" yes"}, ...]

一旦擁有了可以在Ruby中使用的格式的所有信息,就可以創建一種檢查每個ID有效性的方法。

def valid_id?(id_string)
  # uses Regular Expressions to ensure ID is 6 
  # characters that consist of only numbers/letters
  # The double-bang(!!) turn a truthy value to `true`
  # or false value to `false`

  !!id_string.match(/^[\D|\d]{6}$/)
end

如果要測試另一列的有效性,請使用單獨的方法進行。

def valid_required?(req_column)
  req_column.downcase == 'yes' ||   req_column.downcase == 'no'
end

創建一個主驗證器方法

def all_valid?(row)
  valid_id?(row[:id]) && valid_required?(row[:required])
end

然后僅保留其ID有效的記錄

# #select keeps values whose block evaluates to `true`
valid_records = data.select { |record| all_valid?(record) }

暫無
暫無

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

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