Ruby 无法分析%YAML:1.0“;红宝石色

Ruby 无法分析%YAML:1.0“;红宝石色,ruby,opencv,yaml,Ruby,Opencv,Yaml,我使用的是Ruby 1.9.3,我有一个YAML文件,它是由另一个程序生成的,我需要解析它。Ruby YAML解析器似乎无法识别%YAML:1.0,这只是YAML版本的一个指示器 这是我的YAML文件: %YAML:1.0 任务名称:“1000022任务es-2013-03-19-12-00-00任务1任务90000任务s1.vtsk” 工人姓名:“1000022_es-2013-03-19-12-00-00_1_90000_s1.vtsk” 左_标签:!!opencv矩阵 行数:8 科尔斯:1

我使用的是Ruby 1.9.3,我有一个YAML文件,它是由另一个程序生成的,我需要解析它。Ruby YAML解析器似乎无法识别
%YAML:1.0
,这只是YAML版本的一个指示器

这是我的YAML文件:

%YAML:1.0
任务名称:“1000022任务es-2013-03-19-12-00-00任务1任务90000任务s1.vtsk”
工人姓名:“1000022_es-2013-03-19-12-00-00_1_90000_s1.vtsk”
左_标签:!!opencv矩阵
行数:8
科尔斯:1
dt:f
数据:[8,6,2,7,8,4,10,4]
右_标签:!!opencv矩阵
行数:8
科尔斯:1
dt:f
数据:[14,6,12,7,7,4,5,1]
左功能:!!opencv矩阵
行数:8
科尔斯:2
dt:f
数据:[4692611,12,2.81733875e+06,12,2.99522725e+06,12.]。,
4.00128050e+06,12,3.84592175e+06,12,2006966,12,。,
4.47367050e+06,12,9.56887875e+05,0.]
右功能:!!opencv矩阵
行数:8
科尔斯:2
dt:f
数据:[4692611,12,2.81733875e+06,12,2.99522725e+06,12.]。,
4.00128050e+06,12,3.84592175e+06,12,2006966,12,。,
4.47367050e+06,12,9.56887875e+05,0.]
当我这样做的时候:

require 'yaml'
Psych.load(File.read('myfile.yaml'))
我得到这个错误:

Psych::SyntaxError: (): couldn't parse YAML at line 0 column 5 Psych::SyntaxError:():无法分析第0行第5列的YAML
如果从文件中删除
%YAML:1.0
,则一切正常

看起来Ruby库没有正确处理这个问题。据我所知,Psych 2.0.0只显式地处理版本1.1的YAML指令(
%YAML 1.1
);它在
%YAML:1.0
%YAML 1.2
上失败。(从1.1版开始,从指令语法中删除了冒号。)

这对我来说意味着Psych 2.0.0只与YAML 1.1兼容,但由于文件的其余部分似乎是有效的YAML 1.X,删除不兼容的指令可以避免问题

您的选项似乎是:

  • 让另一个程序输出YAML 1.1
  • 提前从文件顶部删除指令,或
  • 在将指令传递给Psych进行解析之前,从缓冲区中剥离该指令

  • 您可以
    gem安装syck
    ,然后
    需要“syck”
    。这里有一个例子

      require 'syck'
      # YAML::ENGINE.yamler = 'syck'
      fp=File.open(file)
      fp.gets # remove the first line
      YAML.load(fp)