2014-02-24 64 views
-1

我想從文本中提取文件中的所有文件名紅寶石分割字符串塊2個級別的錯誤

文件TEMP.TXT

Expand or Collapse 
Add App To Favorites - Ajax;Plugin;AjaxOnSmallDevicesReveal_lmstat_1111.qvwDefault1899-12-30 05:30 



Expand or Collapse 
Add App To Favorites - Ajax;Plugin;AjaxOnSmallDevicesReveal_lmstat_140109_v2_reduced.qvwDefault2014-01-10 15:56 



Expand or Collapse 
Add App To Favorites - Ajax;Plugin;AjaxOnSmallDevicesReveal_lmstat_ONLYPV.qvwDefault2014-02-07 18:34 

我使用下面的代碼

file = File.open("temp.txt", "r") 
    while (line = file.gets)  
     if line.text.include? "Devices" 
      string=line.split("Devices")[1] 
      File.open("out.txt", 'a') {|f| f.puts string.split(".qvw")[0] + ".qvw" } 
      end 
    end 
file.close 

但不知何故,我最終以分裂函數的以下錯誤。

1) Error: 
test_script(M_Dev_Script): 
NoMethodError: undefined method `split' for nil:NilClass 
M_Test_Script.rb:65:in `block (2 levels) in file2' 
M_Test_Script.rb:65:in `open' 

按照錯誤消息,我能夠做出知道錯誤是在

string.split( 「qvw」)[0]

但我無法找到適當的解決方案的錯誤,請任何幫助?

+0

作爲錯誤信息說,'string'是'nil'。做一些追蹤。 –

+0

@Karoly錯誤信息表明該字符串爲零,但我確定使用了puts,'line.split(「Devices」)[1]'確實保存了一些字符串。 – cage

+0

我相信編譯器/錯誤消息。因此,我不相信你的話。你錯了。 –

回答

1

從原始碼我得到undefined method 'text'line.text.include?表達式。 line已經是一個字符串,你不需要選擇text

試試這個:

open("temp.txt", "r").each do |line| 
    if line.include? "Devices" 
    string=line.split("Devices")[1] 
    open("out.txt", 'a') {|f| f.puts string.split(".qvw")[0] + ".qvw" } 
    end 
end 

還是有點更簡單:

open("out.txt", "a") do |f| 
    open("temp.txt", "r").each do |line| 
    f.puts line.split("Devices")[1].split(".qvw")[0] + ".qvw" if line.include? "Devices" 
    end 
end 

產量:

$ cat out.txt 
Reveal_lmstat_1111.qvw 
Reveal_lmstat_140109_v2_reduced.qvw 
Reveal_lmstat_ONLYPV.qvw 
+0

謝謝@mbratch,這是完美的作品。 – cage