ruby是否将所有PUT行写入文件?

ruby是否将所有PUT行写入文件?,ruby,Ruby,我有我的档案 ppp.txt mmm;2;nsfnjd;pet; sadjjasjnsd;6;gdhjsd;pet; gsduhdssdj;3;gsdhjhjsd;dog; 我需要写信 nsfnjd gsdhjhjsd 我使用此代码,但只打印最后一行“gsdhjhjsd” 我不知道哪里做错了 File.open("ppp.txt", "r") do |fi| fi.readlines.each do |line| parts = line.chomp.split(';')

我有我的档案

ppp.txt

mmm;2;nsfnjd;pet;
sadjjasjnsd;6;gdhjsd;pet;
gsduhdssdj;3;gsdhjhjsd;dog;
我需要写信

nsfnjd
gsdhjhjsd
我使用此代码,但只打印最后一行“gsdhjhjsd” 我不知道哪里做错了

 File.open("ppp.txt", "r")  do |fi|
  fi.readlines.each do |line|
    parts = line.chomp.split(';')


    if parts[1].to_i < 4

 puts parts[2]
 File.open("testxx.txt", "w+") do |f|
  f. puts parts[2]
end

    end

  end
end
File.open(“ppp.txt”,“r”)do|fi|
fi.readlines.each do|行|
parts=line.chomp.split(“;”)
如果部件[1],则连接至_i<4
第二部分[2]
File.open(“testxx.txt”,“w+”)do | f|
F第二部分[2]
结束
结束
结束
结束

请帮助我

使用附加模式“a+”而不是写入模式“w+”打开文件,后者会覆盖文件,因为Open命令在循环中调用


或者在循环读取文件的行之前打开写入文件。

在循环外部打开文件描述符

fo = File.open("testxx.txt","w+")
File.open("ppp.txt", "r")  do |fi|
  fi.readlines.each do |line|
    parts = line.chomp.split(';')
    fo.puts parts[2] if parts[1].to_i < 4
  end
end
fo.close()
fo=File.open(“testxx.txt”、“w+”)
File.open(“ppp.txt”,“r”)do | fi|
fi.readlines.each do|行|
parts=line.chomp.split(“;”)
如果部件[1],则fo.将部件[2]放置到_i<4
结束
结束
fo.close()

注意:需要显式关闭
fo
,但文件以块打开;ruby自动关闭文件(
fi
case)。

请将代码缩进两个空格,并使用合理的空格。您的源文件看起来像一个CSV文件,带有
分隔符。使用可能比手动处理文件和字符串容易得多。