这绝对是奇怪的。我无法处理文本文件中的字符串。我唯一能做的就是打印出来。
这是我的代码:
val pattern = new Regex("</DOCUMENT>")
val file = Source.fromFile(fileLocale)(io.Codec("ISO8859-1"))
for (line <- file.getLines()) {
// line match {
// case "</DOCUMENT>" => {println("found it!!!!!"); return} //break out
// case _ => println(line) //save lines to another file
// }
println(line.indexOf("PUBLIC"))
}
首先,我使用了正则表达式和模式匹配pattern.findFirstIn()
,然后匹配结果。然后我发现我无法生产任何东西。我认为我的正则表达式已关闭,因为我对正则表达式一无所知(我试图匹配txt文件中的结束标记</DOCUMENT>
,一旦找到第一个结束标记,我退出循环/函数并将我读到的所有内容保存到其他文件中
请不要告诉我使用JSoup。我正在处理一个23mb大的文本文件,它已经破坏了我的浏览器(用C ++编写)和我的纯文本编辑器。
我正在预处理文本文件并将其缩小到更合适的大小,然后我将使用JSoup来解析HTML DOM树。
但是,由于我无法使用REGEX,因此我考虑了纯字符串匹配case "</DOCUMENT>"
。嗯,它不起作用。我试过line.indexOf("</DOCUMENT>")
。它也没有工作。所以我想知道问题是/
符号,我试图找到PUBLIC
,它肯定在文本文件中。不过,我找不到它。结果都是-1
。
显然,我能做的唯一操作就是打印出原样。发生了什么事?!
这是我用原始的23兆字节文件制作的测试文件:
<SEC-DOCUMENT>0001000180-14-000019.txt : 20140221 <SEC-HEADER>0001000180-14-000019.hdr.sgml : 20140221
20140221171951 ACCESSION 编号:0001000180-14-000019符合提交类型:10-K PUBLIC 文件记录:17个符合报告期:20131229归档 日期:20140221日期变更:20140221
FILER: COMPANY DATA: COMPANY CONFORMED NAME: SANDISK CORP CENTRAL INDEX KEY: 0001000180 STANDARD INDUSTRIAL CLASSIFICATION: COMPUTER
存储设备[3572]国税号:770191793状态 法律援助:DE FISCAL年末:1229
FILING VALUES: FORM TYPE: 10-K SEC ACT: 1934 Act SEC FILE NUMBER: 000-26734 FILM NUMBER: 14634715 BUSINESS ADDRESS: STREET 1: 951 SANDISK DRIVE CITY: MILPITAS STATE: CA ZIP: 95035 BUSINESS
电话:408-801-1000
MAIL ADDRESS: STREET 1: 951 SANDISK DRIVE CITY: MILPITAS STATE: CA ZIP: 95035 </SEC-HEADER> <DOCUMENT> <TYPE>10-K
1 sndk201310-k.htm表格10-K FY13 SNDK 2013 10-K 10-K 2第二部分 表格10-K FY13
</DOCUMENT> <DOCUMENT> <TYPE>10-K <SEQUENCE>2 <FILENAME>Third PART <DESCRIPTION>FORM 10-K FY13 <TEXT> <!DOCTYPE html PUBLIC "-//W3C//DTD
HTML 4.01 Transitional // EN&#34; &#34; http://www.w3.org/TR/html4/loose.dtd&#34;&GT;
答案 0 :(得分:1)
我会做以下事情:
val lines = file.getLines.takeWhile( ! _.contains("</DOCUMENT>")
这将收集所有行,直到第一行包含</DOCUMENT>
并返回Iterator[String]
,您可以阅读一次,或者如果您更喜欢列表:
val lines = file.getLines.takeWhile( ! _.contains("</DOCUMENT>").toList
但是如果内存使用有问题,你最好使用Iterator
,它根据需要读取文件,不需要为所有文件分配内存。