我是红宝石编程的新手。我正在尝试逐行读取文本文件。
这是我的示例文本文件:
john
doe
john_d
somepassword
这是我的代码:
f = File.open('input.txt', 'r')
a = f.readlines
n = a[0]
s = a[1]
u = a[2]
p = a[3]
str = "<user><name=\"#{n}\" surname=\"#{s}\" username=\"#{u}\" password=\"#{p}\"/></user>"
File.open('result.txt', 'w') { |file| file.print(str) }
输出应如下所示:
<user><name="john" surname="doe" username="john_d" password="somepassword"/></user>
但是result.txt看起来像这样。每行包括换行符:
<user><name="john
" surname="doe
" username="john_d
" password="somepassword"/></user>
我该如何纠正?
答案 0 :(得分:3)
每行都包含换行符,因为每行末尾都有换行符。
在不需要时将其删除:
n = a[0].gsub("\n", '')
s = a[1].gsub("\n", '')
# ...
答案 1 :(得分:1)
如spickermann所述,也只需将第二行更改为:
a = f.readlines.map! { |line| line.chomp }
答案 2 :(得分:1)
如@iGian所述,chomp
是清理文本的一个不错的选择。我不确定您使用的是哪个版本的Ruby,但是这里是chomp
上Ruby 2.5官方文档的链接,以便您了解它如何为您提供帮助:https://ruby-doc.org/core-2.5.0/String.html#method-i-chomp
使用a
后,查看变量chomp
的内容:
2.4.1 :001 > f = File.open('input.txt', 'r')
=> #<File:input.txt>
2.4.1 :002 > a = f.readlines.map! {|line| line.chomp}
=> ["john", "doe", "john_d", "somepassword"]
根据您希望从输入字符串中看到的其他几个极端情况,这是另一个建议,可以帮助您清理字符串:strip
,并带有示例的官方文档链接:{{ 3}}
使用a
后,查看变量strip
的内容:
2.4.1 :001 > f = File.open('input.txt', 'r')
=> #<File:input.txt>
2.4.1 :002 > a = f.readlines.map! {|line| line.strip}
=> ["john", "doe", "john_d", "somepassword"]
答案 3 :(得分:0)
FName = 'temp'
File.write FName, "john
doe
john_d
somepassword"
#=> 28
有两种方法。
s = "<user><name=\"%s\" surname=\"%s\" username=\"%s\" password=\"%s\"/></user>"
puts s % File.readlines(FName).map(&:chomp)
# <user><name="john" surname="doe" username="john_d" password="somepassword"/></user>
puts s % File.read(FName).split("\n")
# <user><name="john" surname="doe" username="john_d" password="somepassword"/></user>
请参见String#%,如该文档所述,请参见Kernel#sprintf。