zzero
zzero

Reputation: 154

ruby write all lines of puts in file?

I have my file

ppp.txt

mmm;2;nsfnjd;pet;
sadjjasjnsd;6;gdhjsd;pet;
gsduhdssdj;3;gsdhjhjsd;dog;

I need to write

nsfnjd
gsdhjhjsd

I use this code but only print the last line "gsdhjhjsd" I dont know what is doing wrong

 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

Please help me

Upvotes: 3

Views: 622

Answers (2)

aqfaridi
aqfaridi

Reputation: 739

open the file descriptor outside the loop

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()

NOTE: Need to explicitly close fo, but file open with block; ruby close the file automatically (fi case).

Upvotes: 1

mr12086
mr12086

Reputation: 1147

Open the file using append mode, 'a+' instead of write mode 'w+', which overwrites the file, as the open command is called inside a loop.

Or open the write file prior to looping the lines of the read file.

Upvotes: 1

Related Questions