2014-05-05 39 views
0

我兩個文件,file1.txtfile2.txt每個文件不允許嵌套

file1.txt內容:

line 1 file 1 
line 2 file 1 
line 3 file 1 

file2.txt內容:

line 1 file 2 
line 2 file 2 
line 3 file 2 

,並具有以下ruby代碼:

nin_file = File.open "file1.txt" 
dev_id_file = File.open "file2.txt" 

nin_file.each do |nin_line| 
     dev_id_file.each do |dev_line| 
       nin_line.delete!("\r\n") 
       puts "#{nin_line} => #{dev_line}" 
     end 
end 

nin_file.close 
dev_id_file.close 


(1..3).each do |e1| 
     (1..5).each do |e2| 
       puts "#{e1} => #{e2}" 
     end 
end 

而這裏的輸出(爲什麼每次內不與文件的工作,但對於範圍工作!)

line 1 file 1 => line 1 file 2 
line 1 file 1 => line 2 file 2 
line 1 file 1 => line 3 file 2 
1 => 1 
1 => 2 
1 => 3 
1 => 4 
1 => 5 
2 => 1 
2 => 2 
2 => 3 
2 => 4 
2 => 5 
3 => 1 
3 => 2 
3 => 3 
3 => 4 
3 => 5 

回答

1

nin_file.each第一次迭代後的dev_id_file流爲空:

dev_id_file.each do |dev_line| 
    puts "1 => #{dev_line}" 
end 
dev_id_file.each do |dev_line| 
    puts "2 => #{dev_line}" 
end 

輸出:

1 => line 1 file 2 
1 => line 2 file 2 
1 => line 3 file 2 

有它每一次工作,你需要做的是一個多array:

nin_file = File.readlines"file1.txt" 
dev_id_file = File.readlines "file2.txt" 

nin_file.each do |nin_line| 
    dev_id_file.each do |dev_line| 
    nin_line.delete!("\r\n") 
    puts "#{nin_line} => #{dev_line}" 
    end 
end 

輸出:

line 1 file 1 => line 1 file 2 
line 1 file 1 => line 2 file 2 
line 1 file 1 => line 3 file 2 
line 2 file 1 => line 1 file 2 
line 2 file 1 => line 2 file 2 
line 2 file 1 => line 3 file 2 
line 3 file 1 => line 1 file 2 
line 3 file 1 => line 2 file 2 
line 3 file 1 => line 3 file 2 
+0

是的...我發佈了這個問題後,我意識到這一點:) ...感謝readlines funciton會嘗試 –

0

file2一次迭代後完全讀取。這就是爲什麼你沒有看到更多的線。

這應該給你想要的輸出。

nin_file = File.open "file1.txt" 
dev_id_file = File.open "file2.txt" 

nin_file.each do |nin_line| 
     dev_id_file.rewind 
     dev_id_file.each do |dev_line| 
       nin_line.delete!("\r\n") 
       puts "#{nin_line} => #{dev_line}" 
     end 
end 
+0

謝謝,但我不喜歡讓更多的IO操作... :)'rewind' .. –

+0

@MuhammadHewedy想想看,如果你有一大堆線在你的文件,或你的內存不會很高興:) –

+0

是的,它是最好的情況(如DOM與薩克斯:))..謝謝 –

相關問題