我試圖通過文件讀取,找到某個模式,然後在包含該模式的行之後抓取一組文本行。不太確定如何解決這個問題。解析特定行數
解析特定行數
回答
的工作,如果你想要的文件filename
匹配pattern
行後n
行數:
lines = File.open(filename) do |file|
line = file.readline until line =~ /pattern/ || file.eof;
file.eof ? nil : (1..n).map { file.eof ? nil : file.readline }.compact
end
這應該處理所有情況下,如該模式不存在在文件(返回nil
)或存在是所述匹配線後小於n
線(包含文件的最後幾行所得陣列。)
+1 - 很好地完成 – 2010-07-11 20:13:08
首先將文件解析爲行。打開,讀取就行了分裂打破
lines = File.open(file_name).read.split("\n")
然後得到指數
index = line.index{|x| x.match(/regex_pattern/)}
哪裏regex_pattern是你正在尋找的模式。使用指數作爲起點,然後第二個參數是行數(在這種情況下5)
lines[index, 5]
它將返回數組「行」
你可以結合多一點減少行數。但我試圖保持它的可讀性。
既然這樣打開了整個文件,那麼對於更大的文檔,它會有內存問題嗎? (最多5MB左右) – Randuin 2010-07-11 08:05:39
沒有那麼多,我用類似的方法解析500MB的日誌文件。 – 2010-07-11 11:30:42
即使VM啓用它,將整個文件吸收到內存中的風格也很差。 – 2010-07-11 17:47:14
matched = false;
num = 0;
res = "";
new File(filename).each_line { |line|
if (matched) {
res += line+"\n";
num++;
if (num == num_lines_desired) {
break;
}
} elsif (line.match(/regex/)) {
matched = true;
}
}
這樣做的好處是無需在匹配的情況下讀取整個文件。
完成後,res
將保留所需的行。
神聖莫里。這必須是我見過的最醜陋的Ruby代碼。其實,考慮到語法錯誤的數量,我幾乎不會稱之爲Ruby代碼。 – 2010-07-11 08:35:20
這是CRuby!嘿,Ruby支持塊語法。你不*有*使用「開始」和「結束」:-P – Borealid 2010-07-11 08:59:56
如果你沒有綁定到Ruby,grep -A 12 trivet
將顯示任何帶trivet的行之後的12行。任何正則表達式將在地方「三腳架」
嗯,我實際上仍然需要解析以下任何行。並從中提取信息。所以grep並不適合。 – Randuin 2010-07-11 05:36:18
file = File.open(File.join(Rails.root, 'lib', 'file.json'))
#convert file into an array of strings, with \n as the separator
line_ary = file.readlines
line_count = line_ary.count
i = 0
#or however far up the document you want to be...you can get very fancy with this or just do it manually
hsh = {}
line_count.times do |l|
child_id = JSON.parse(line_ary[i])
i += 1
parent_ary = JSON.parse(line_ary[i])
i += 1
hsh[child_id] = parent_ary
end
哈哈我說得太多那肯定應該讓你開始
- 1. Android HTML數據解析特定行
- 2. 解析javacc中的特定行數
- 3. 從先前解析的值解析特定數量的行
- 4. 解析特定日期格式的行?
- 5. 如何解析perl中的特定行?
- 6. 使用scrapy解析函數來解析一個特定的url
- 7. 解析特定的JSON數據
- 8. 爲特定參數值解析url
- 9. 解析HTML某些特定數據
- 10. 解析來自html的特定數據
- 11. 如何解析特定的json數組?
- 12. 傑克遜解析特定數組
- 13. 只解析數組中的特定值?
- 14. 解析特定的XML
- 15. PDF解析特定文本
- 16. C#解析特定的xml
- 17. Jsoup解析特定屬性
- 18. 解析特定的div HtmlAgilityPack
- 19. 解析json python特定鍵
- 20. 解析奇特換行符
- 21. PHP的解析HTML DOM和計數特定行
- 22. 爲重複行的特定實例解析分隔數據
- 23. 用Django逐行(或特定行#)解析textarea
- 24. LibGDX Json解析器 - 解析特定節點/對象
- 25. 在JSON中解析ajax的特定值
- 26. 從BeautifulSoup解析獲取特定值
- 27. 解析JSON的特定部分
- 28. 解析XML文件的特定部分
- 29. 解析輸入來獲得特定值
- 30. 使用Jsoup解析特定文本
聽起來像功課。你到目前爲止有多遠?從一些僞代碼開始(將其添加到您的問題中),然後對其進行優化。當你有更具體的問題時,我們在這裏提供幫助。 – 2010-07-11 04:33:10
如果是作業,它應該被標記爲家庭作業。 – kiamlaluno 2010-07-11 04:39:45
這其實根本不是家庭作業,因爲我根本不是CS的學生,哈哈。我試圖解析日誌到我玩的遊戲。 – Randuin 2010-07-11 04:45:50