我有一个ruby脚本,可以进行一些文本解析(àlámarkdown)。它是按照一系列步骤完成的,比如
string = string.gsub # more code here
string = string.gsub # more code here
# and so on
首先将文字输入string
的最佳(即最可靠)方法是什么?这是一个脚本,它将被输入的文本可能会有很大差异 - 它可能是多语言的,有一些字符可能会破坏shell(如"
,'
,’
, &
,$
您明白了这一点,并且很可能是多线的。
是否有一些技巧
cat << EOF
bunch of text here
EOF
其他注意事项
我不是在寻找降价解析器,这是我想做的事情,而不是我想要的工具。
我不是一个很大的ruby
用户(我开始使用它),所以你提供的答案越详细越好。
它必须是完全可编写脚本的(即,不要中断询问用户的信息)。
答案 0 :(得分:1)
Kernel#gets
方法将读取使用stdin中的记录分隔符或命令行中指定的文件分隔的字符串。因此,如果您使用它,您可以执行以下操作:
yourscript <filename #read from filename
yourscript file1 file2 # read both file1 and file2
yourscript #lets you type at your script
所以运行类似:
cat <<'eof' |ruby yourscript.rb
This' & will $all 'eof' be 'fine'''
eof
脚本可能包含以下内容:
s = gets() # read a line
lines = readlines() # read all lines into an array
这是命令行脚本的标准。如果你想拥有一个用户界面,那么你会想要更复杂的东西。 Ruby解释器有一个选项可以在读取文件时设置文件的编码。
答案 1 :(得分:1)
$stdin.read
如您所见,stdin在全局变量$stdin
中提供。由于它是IO
对象,如果read
不符合您的需求,则会a lot of other methods available。
这是shell中一个简单的单行示例:
$ echo "foo\nbar" | ruby -e 'puts $stdin.read.upcase'
FOO
BAR
显然,从stdin读取非常灵活,因为你可以从任何地方输入输入。
答案 2 :(得分:0)
Ruby非常擅长编码(参见例如Encoding
docs)。要将文本导入Ruby,通常使用gets
或读取File
个对象,或使用GUI,可以使用gtk2
gem或rugui
构建GUI(如果已经完成)。如果您从野外互联网获取文本,安全性应该是您的关注点。 Ruby曾经有4个$SAFE
级别,但经过一些讨论后,现在可能只有3个级别。在任何情况下,处理字符串的最佳策略是尽可能多地了解您预期的字符串属性。处理绝对任意的字符串是一项非常困难的任务。尝试限制可能的编码数量,并计算出您期望的字符串的最大大小。
另外,关于你原定的目标,写一个像降价处理器一样的东西,你可能想要不重新发明轮子(除非是出于教学目的)。有这个SO帖子: Better ruby markdown interpreter?
答案会引导你到kramdown
宝石,虽然我没有亲自尝试过,但它得到了很多赞誉。