无法处理Txt文件中的任何字符串

时间:2014-03-23 13:25:39

标签: regex scala

这绝对是奇怪的。我无法处理文本文件中的字符串。我唯一能做的就是打印出来。

这是我的代码:

 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;    

1 个答案:

答案 0 :(得分:1)

我会做以下事情:

val lines =  file.getLines.takeWhile( ! _.contains("</DOCUMENT>")

这将收集所有行,直到第一行包含</DOCUMENT>并返回Iterator[String],您可以阅读一次,或者如果您更喜欢列表:

val lines =  file.getLines.takeWhile( ! _.contains("</DOCUMENT>").toList

但是如果内存使用有问题,你最好使用Iterator,它根据需要读取文件,不需要为所有文件分配内存。