如何解析文本文件中按冒号分隔的块参数?
处理冒号分隔文本行的参数提取方案
示例数据
WoodBlock : 0.886275, 0.607843, 0.25098 : 2, 2, 2 : true : -75.5656891, -11.899992, -416.506866, 1, 0, 0, 0, 1, 0, 0, 0, 1 : 0, 0, 0 : 0, 0, 0 RustedBlock : 0.639216, 0.635294, 0.647059 : 2, 2, 2 : true : -35.5656891, -11.899992, -424.506866, 1, 0, 0, 0, 1, 0, 0, 0, 1 : 0, 0, 0 : 0, 0, 0 StoneBlock : 0.639216, 0.635294, 0.647059 : 2, 2, 2 : true : -50.5656891, -11.899992, -425.506866, 1, 0, 0, 0, 1, 0, 0, 0, 1 : 0, 0, 0 : 0, 0, 0 MetalRod : 0.388235, 0.372549, 0.384314 : 1, 3, 1 : true : -51.5656891, -11.399992, -412.506866, 1, 0, 0, 0, 1, 0, 0, 0, 1 : 0, 0, 0 : 0, 0, 0
解决方案
针对选中第一行、提取并处理指定位置参数的需求,推荐两种实现方式:
1. Ruby 脚本实现(适合编程场景)
gsub更适合文本替换,提取参数用split配合行选择更直接:
# 读取文件,过滤空行后取第一行 first_line = File.readlines('blocks.txt').reject(&:empty?).first # 按冒号分割,同时去除每个参数首尾的空格 params = first_line.split(':').map(&:strip) # 提取并处理第2个参数(RGB值) rgb_values = params[1].split(',').map(&:strip).map(&:to_f) puts "处理后的RGB: #{rgb_values}" # 提取并处理第3个参数(尺寸) dimensions = params[2].split(',').map(&:strip).map(&:to_i) puts "处理后的尺寸: #{dimensions}" # 提取并处理第4个参数(布尔状态) is_active = params[3] == 'true' puts "激活状态: #{is_active}" # 提取并处理第5个参数(位置与变换矩阵) transform_data = params[4].split(',').map(&:strip).map(&:to_f) puts "变换参数: #{transform_data}"
2. Awk 命令实现(适合命令行快速处理)
如果不需要编写脚本,用awk可以直接在命令行提取指定参数:
# 提取第一行第2个参数(RGB值) awk 'NF>0 && NR==1 {split($0, arr, /\s*:\s*/); print arr[2]}' blocks.txt # 提取第一行第3个参数(尺寸) awk 'NF>0 && NR==1 {split($0, arr, /\s*:\s*/); print arr[3]}' blocks.txt
NF>0:跳过文件中的空行NR==1:仅选中第一行split($0, arr, /\s*:\s*/):用冒号分割行内容,自动忽略冒号前后的空格,结果存入数组arr- 数组索引从1开始,
arr[1]是块名称,arr[2]对应第二个参数,以此类推
内容的提问来源于stack exchange,提问作者REMYA
相关产品推荐
相关产品推荐

