我正在尝试根据必需和可选但理想字段的简短列表在 ruby 中编写一个基本的 MARC 验证器,部分是作为在 ruby 中编写一些东西的练习,我不太熟悉。
我想出了看起来像有效的 ruby 代码来存储我的“可选”字段(并且脚本在启用代码时执行):
Optional = ['006', '007', '010', '020', '022', {'040' => ['c']}, '041', ['050', '060', '082', '086', /09\d/], {/1\d\d/ => ['a']}, {'240' => ['a']}, '250', {'260' => ['a', 'b', 'c']}, {'300' => ['a']}, '490', /7[0-5]\d/, '830']
根据我有限的阅读,这在技术上是可行的......但我不确定从这里去哪里。我想遍历记录中的各个字段,如果缺少字段(或子字段,如果注明),请在屏幕上写入警告:
sysnum = record['001']
record.fields.each do |field|
Optional.each do |optfield|
if field.tag =~ optfield
break
else
puts "#{sysnum} is missing #{field.tag}"
end
end
end
但是,这不适用于我的所有情况,因为并非所有optfield
值都是字符串。我应该使用 if 块来测试哈希吗?正则表达式值呢?=~
当右侧不是正则表达式(string =~ otherstring
而不是)时是否会测试为真string =~ regex
?
我在这里完全吠错了树吗?