我有一個使用ruby的標準StringScanner編寫的解析器。如果我可以在流式文件上使用它會很好。是否有一個等同於StringScanner,不需要我將整個字符串加載到內存中?StringScanner掃描IO而不是字符串
5
A
回答
-1
有StringIO。
很抱歉誤讀你的問題。看看this似乎已經流選項
1
您可能需要返工解析器了一點,但你可以從文件中進料管這樣的掃描儀:
File.open('filepath.txt', 'r') do |file|
scanner = StringScanner.new(file.readline)
until file.eof?
scanner.scan(/whatever/)
scanner << file.readline
end
end
+3
我知道這是幾年後,但仍然將整個文件讀入內存。一旦你到達eof,「scanner」就會保存文件的完整副本......(在字符串指針移過內容後,它不會釋放任何內容) – 2013-08-09 20:39:16
0
StringScanner意爲此,加載大串並來回一個內部的指針,如果你把它流,則引用迷路時,你不能使用unscan,check_until,pre_match,後_match, 你可以,但爲此你需要緩衝所有以前的輸入。
如果您擔心緩衝區大小,那麼只需加載大塊數據,然後使用簡單的正則表達式或稱爲Parser的寶石。 最簡單的方法是讀取數據的修復大小。
# iterate over fixed length records
open("fixed-record-file") do |f|
while record = f.read(1024)
# parse here the record using regexp or parser
end
end
[更新]
即使使用這樣的循環中,您可以使用StringSanner,你只需要更新數據的每個新塊的字符串:
串= (str)
將正在掃描的字符串更改爲str並重置掃描儀。 退貨str
相關問題
- 1. 掃描到字符串
- 2. Javascript字符串掃描儀?
- 3. 錯誤掃描字符串
- 4. 逐行掃描字符串
- 5. 掃描字符串格式
- 6. 掃描器不是問串
- 7. 「掃描字符串文字時的EOL」
- 8. 如何在柔性掃描儀中掃描「字符串」常量?
- 9. 我該如何做一個掃描儀nextDouble(),但字符串而不是雙?
- 10. sscanf的不是從字符串中的元素掃描正常
- 11. ANTLR:Unicode字符掃描
- 12. 如何在C++中掃描字符串
- 13. NSScanner從結尾掃描字符串
- 14. 店字符串中使用掃描儀
- 15. 在Angularjs中掃描DOM的字符串
- 16. 掃描儀對字符串和int
- 17. Java掃描器更改字符串
- 18. 用逗號掃描字符串
- 19. c中的掃描字符串
- 20. Java:掃描字符串的模式
- 21. java掃描器字符串的比較
- 22. 比較掃描儀到字符串
- 23. 掃描字符串的ASCII值
- 24. 替換字符串java掃描儀類
- 25. 掃描儀對象 - 分割字符串
- 26. Java掃描儀輸入字符串
- 27. 掃描輸入的字符串
- 28. 掃描視頻文本字符串?
- 29. 帶掃描器的字符串輸入
- 30. 紅寶石串掃描返回不同的字符串
這與我所需要的相反! – jes5199 2010-03-17 04:33:14
抱歉誤讀你的問題。看看http://tinyurl.com/ydrq8o8似乎有流選項。 – nightshade427 2010-03-17 15:49:12