如何用Ruby结合正则验证文本文件每行是否符合指定格式?
Ruby验证文本文件格式方案
没问题,我来帮你搞定这个需求!下面是实现步骤和完整代码:
1. 匹配格式的正则表达式
首先我们需要精准匹配你要的格式,对应的正则表达式是:
VALID_LINE_PATTERN = /^\d+,S1-\d+,S2-\d+,S3-\d+,S4-\d+$/
解释一下这个正则的各个部分:
^:锚定行的开头,确保没有多余前缀\d+:匹配一个或多个数字(对应开头的整数),S1-\d+:匹配逗号后紧跟S1-加数字的格式,后面的S2/S3/S4同理$:锚定行的结尾,确保没有多余后缀
2. 完整Ruby代码实现
这段代码会逐行读取文件,验证每行格式,不匹配就抛出指定错误:
VALID_LINE_PATTERN = /^\d+,S1-\d+,S2-\d+,S3-\d+,S4-\d+$/ def validate_file_format(file_path) File.foreach(file_path).with_index(1) do |line, line_num| stripped_line = line.strip # 跳过空行(如果需要允许空行,就注释掉下面这行) raise "文件输入格式不匹配(第#{line_num}行是空行)" if stripped_line.empty? unless stripped_line.match?(VALID_LINE_PATTERN) raise "文件输入格式不匹配(第#{line_num}行:#{stripped_line})" end end puts "所有行格式验证通过!" rescue Errno::ENOENT raise "错误:找不到文件 #{file_path}" rescue => e puts e.message exit 1 end # 使用示例:替换成你的文件路径 validate_file_format("your_input_file.txt")
3. 代码说明
File.foreach(file_path).with_index(1):逐行读取文件,同时记录行号(从1开始,方便快速定位错误行)line.strip:去掉每行前后的空白字符(比如换行符、空格),避免因为这些无关字符干扰匹配结果- 额外处理了空行的情况(如果你的业务场景允许空行,可以删掉对应的判断逻辑)
- 捕获了文件不存在的异常,同时统一处理所有错误并输出清晰提示
4. 测试示例
假设你的文件内容如下:
1,S1-88,S2-53,S3-69,S4-64 2,S1-100,S2-75,S3-90,S4-80 3,S1-abc,S2-50,S3-60,S4-70 # 这行会触发错误
运行代码后,会输出:文件输入格式不匹配(第3行:3,S1-abc,S2-50,S3-60,S4-70)
内容的提问来源于stack exchange,提问作者raj_acharya
相关产品推荐
相关产品推荐

