Ruby 如何实际将换行符写入字符串
我怎么做这个Ruby 如何实际将换行符写入字符串,ruby,string-substitution,Ruby,String Substitution,我怎么做这个 content[i].gsub("\n", "\\n") 将(类似)这样的内容写入文件 str = "some text\n" 我正在编写一段代码,以获取一个文件并从中构建一个字符串,如果有帮助的话,可以将该字符串插入到您使用的源代码中 如果我错了,并且我的错误实际上在代码中的其他地方,则如下所示: #!/bin/usr/ruby #reads a file and parses into a single string declaration in language of c
content[i].gsub("\n", "\\n")
将(类似)这样的内容写入文件
str = "some text\n"
我正在编写一段代码,以获取一个文件并从中构建一个字符串,如果有帮助的话,可以将该字符串插入到您使用的源代码中
如果我错了,并且我的错误实际上在代码中的其他地方,则如下所示:
#!/bin/usr/ruby
#reads a file and parses into a single string declaration in language of choice
#another little snippet to make my job easier when writing lots of code
#programmed by michael ward
# h3xc0ntr0l@gmail.com | gists.github.com/michaelfward
# ***************************************
# example scrips
# with writefiles
# | writefiles [file with paths] [file to write*]
# | makestring [file to write* (actually is read, but same as above)] [lang]
#****************************************
def readFile(path)
fd = File.open(path, "r")
content = []
fd.each_line {|x| content.push(x)}
content = fixnewlines(content)
str = content.join()
str
end
def fixnewlines(content)
content.each_index do |i|
content[i].gsub("\n", "\\n")
end
end
def usage
puts "makestring [file to read] [language output]"
exit
end
langs = {"rb"=>"str =", "js" => "var str =", "c"=> "char str[] ="}
usage unless ARGV.length == 2
lang = ARGV[1]
path = ARGV[0]
str = readFile(path)
if langs[lang] == nil
if lang == "c++" || lang == "cpp" || lang == "c#"
puts "#{lang[c]}#{str}"
else
puts "unrecognized language found. supported languages are"
langs.each_key {|k| puts " #{k}"}
exit
end
else
puts "#{langs[lang]} #{str}"
end
这取决于您使用的平台。Unix使用
\n
作为行尾字符,而windows使用\r\n
。看起来您正在用\\n
替换所有新行字符,这将转义我不希望在任何平台上使用的新行字符。只需删除修复新行
并更改读取文件
:
def readFile(path)
File.read(path).gsub("\n", '\n')
end
希望能有帮助。在Windows上使用
\r\n
而不是\n
。无需在单括号内转义斜杠。Hi;谢谢你!我觉得这与我写字符串的方式有关(比如,我意识到我在逃避我的转义,写“\”,后跟一个“n”,导致解析\n新行)。实际上,我的问题更多的是如何在不解析换行符的情况下将\n写入文件(或stdout,这不重要,但我认为这两种方式都是一样的)。工作起来很有魅力。谢谢Ruby的惯例是使用“snake case”(小写字母、数字和下划线)作为变量和方法的名称,因此您通常会看到您的方法readFile
writedread\u file
。您不必这样做,但您将看到99%的Ruby代码都遵循这一惯例。我建议您将这篇文章发布在codereview.stackexchange.com上,您将获得关于如何使其更清晰、简洁和类似rubylike的好建议。@MarkThomas希望发布的代码能够按预期工作。其他一切(似乎包括这个)都被认为是离题的。我的意思是,现在它得到了回答(并且可能正在工作),这是一个进一步改进的机会。谢谢你们,我实际上并不知道ruby约定存在(也许我用这种方式命名方法是我C时代遗留下来的),我一定会接受你的建议!