如何使用RUBY读取文本文件中的行

时间:2018-07-29 12:08:03

标签: ruby

我是红宝石编程的新手。我正在尝试逐行读取文本文件。

这是我的示例文本文件:

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>

我该如何纠正?

4 个答案:

答案 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