我想在每行的格式像这样的文本文件的每一行改为:如何分割线从文本文件中读取
Bob,Daniels,40,50,60,70,80
我想分割每行的基础上的内容逗号,但由于某种原因,它不工作当我这样做:
f = File.open("textfile.txt", "r")
f.each_line do |line|
line.split(",")
end
我在做什么错在这里或者是有更好的方法我可以这样做呢?
我想在每行的格式像这样的文本文件的每一行改为:如何分割线从文本文件中读取
Bob,Daniels,40,50,60,70,80
我想分割每行的基础上的内容逗号,但由于某种原因,它不工作当我这样做:
f = File.open("textfile.txt", "r")
f.each_line do |line|
line.split(",")
end
我在做什么错在这里或者是有更好的方法我可以这样做呢?
您应该保存分裂的结果,例如,它保存到变量:
result = []
f = File.open("textfile.txt", "r")
f.each_line {|line| result << line.split(",") }
输出从逗号分隔的文件的最后名称字段:
计划
f.each_line do |line|
fields = line.split(",")
puts fields[1]
end
输入(textfile.txt)
Bob,Daniels,40,50,60,70,80
John,Smith,40,50,60,70,80
输出
Daniels
Smith
你正在阅读一个CSV( “逗号分隔值”)文件,所以利用现有CSV类。 CSV文件有很多特殊情况,天真split
不会处理。
该文档有许多不同的例子来说明如何读写文件或字符串。
例如,从the documentation用于从文件中读取一行在同一时间:
CSV.foreach("path/to/file.csv") do |row| # use row here... end
在你的代码的问题是:
f.each_line do |line|
line.split(",")
end
each_line
遍历文件正在使用each
块读取。
line.split(",")
分割值但不做任何事情,所以结果被扔掉。你可以把结果赋值给一个变量或遍历结果数组:
foo = line.split(",")
# do something with foo
或:再次
line.split(",").each do |i|
# do something with i
end
但是,该CSV规范不是单纯依靠split
之前,所以三思而后行。例如,下面一行是有效的CSV:
this,"is,some,CSV",data
,并应被解析为:
["this", "is,some,CSV", "data"]
但split(",")
会错误地产生:
,而且因为它是错的,有会有很多额外的清理需要。
split
在一组简单的逗号分隔值上看起来很安全,这让您认为它对所有事物都是安全的,直到遇到上述类型的情况。
你的程序没有行输出任何东西,所以我不知道你会期望什么。请给出[mcve]和更好的解释问题。 –
您正在阅读逗号分隔值(CSV)文件。使用现有的[CSV](https://ruby-doc.org/stdlib-2.4.1/libdoc/csv/rdoc/CSV.html)类。 CSV文件看起来很简单,但有一些特殊情况,一个简单,朴素的“split”不能处理。 –