Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何实际将换行符写入字符串_Ruby_String Substitution - Fatal编程技术网

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
writed
read\u file
。您不必这样做,但您将看到99%的Ruby代码都遵循这一惯例。我建议您将这篇文章发布在codereview.stackexchange.com上,您将获得关于如何使其更清晰、简洁和类似rubylike的好建议。@MarkThomas希望发布的代码能够按预期工作。其他一切(似乎包括这个)都被认为是离题的。我的意思是,现在它得到了回答(并且可能正在工作),这是一个进一步改进的机会。谢谢你们,我实际上并不知道ruby约定存在(也许我用这种方式命名方法是我C时代遗留下来的),我一定会接受你的建议!