用Ruby解析系统函数

用Ruby解析系统函数,ruby,Ruby,我正在我的系统函数中执行pdfinfo,我只想获得页面大小612x1008,但我不确定如何解析它 我的代码 output = system("pdfinfo example.docx_ms.pdf") print "#{output} \n" x = "612x1008" puts x if x == output puts "yes" else puts "no" end 输出 612 x 1008 true 使用提供的答案,您可以这样做 output=`pdfinfo examp

我正在我的系统函数中执行
pdfinfo
,我只想获得页面大小
612x1008
,但我不确定如何解析它

我的代码

output = system("pdfinfo example.docx_ms.pdf")
print "#{output} \n"
x = "612x1008"
puts x

if x == output
 puts "yes"
else
 puts "no"
end

输出

612 x 1008
true
使用提供的答案,您可以这样做

output=`pdfinfo example.docx_ms.pdf | grep'页面大小:''awk'{print$3$4$5}'`.chomp
打印“#{output}\n”
它的作用是

  • pdfinfo
  • 使用grep ie
    页面大小
  • 使用
    awk
    过滤页面大小维度
  • 你可以阅读更多关于和

    使用而不是系统来捕获输出:

    output = `pdfinfo example.docx_ms.pdf | grep 'Page size:'`
    puts output.gsub(/Page size:\s*\b/, '').chomp
    


    我会避免外部依赖,而是使用Ruby PDF库,就像这样。太棒了,谢谢!我的输出是
    612x1008 true
    我添加了一个if语句来比较输出,它返回为
    false
    我在question@tintin除非从pdfinfo结果中提取
    Page size
    维度,否则if语句将不起作用。现在您正在将X变量与pdfinfo结果进行比较。我如何才能做到这一点?我们不是已经得到尺寸了吗?这会打印输出,但不会捕获它。你需要这样做。使用
    grep
    awk
    也是一种倒退,因为Ruby可以在内部完成所有这一切。如果输出需要解析
    readlines.grep
    是一个好的开始。我得到了一个
    未定义的方法'gsub',用于true:TrueClass(NoMethodError)
    您使用的是反勾还是系统?我最初犯了一个复制粘贴错误并使用了system(返回true/false)。这是可行的,但您能解释一下
    页面大小:\s*\b/
    的作用吗?gsub用第二个参数替换了该模式<代码>\s*匹配0个或多个空格
    \b
    匹配一个单词boundry,我想当我想到它时,它实际上有点多余。
    irb(main):001:0> `pdfinfo example.docx_ms.pdf | grep 'Page size:'`.gsub(/Page size:\s*\b/, '').chomp
    => "595 x 842 pts (A4)"