我想編寫一個Scala腳本遞歸處理目錄中的所有文件。對於每個文件,我想看看是否有任何情況下,在X行和X - 2行出現字符串。如果出現類似情況,我想停止處理該文件,並將該文件名添加到地圖的文件名到發生次數。我剛開始學習今天斯卡拉,我已經拿到了文件遞歸碼的工作,並且需要一些幫助,搜索字符串,這是我到目前爲止有:Scala:最簡潔的方式遞歸解析文件檢查多個字符串
import java.io.File
import scala.io.Source
val s1= "CmdNum = 506"
val s2 = "Data = [0000,]"
def processFile(f: File) {
val lines = scala.io.Source.fromFile(f).getLines.toArray
for (i = 0 to lines.length - 1) {
// want to do string searches here, see if line contains s1 and line two lines above also contains s1
//println(lines(i))
}
}
def recursiveListFiles(f: File): Array[File] = {
val these = f.listFiles
if (these != null) {
for (i = 0 to these.length - 1) {
if (these(i).isFile) {
processFile(these(i))
}
}
these ++ these.filter(_.isDirectory).flatMap(recursiveListFiles)
}
else {
Array[File]()
}
}
println(recursiveListFiles(new File(args(0))))
感謝您的迴應,我試了一下,但得到一個異常時,它正在處理文件: –
scala.MatchError:List(2010-05-31 17:31:06.015 UTC + 0000 INFO [xxx-HostSy ncThread -Runnable-> HostSync-176666318810351] estation.services.timesync.TimeSync - 與主機'http://www04.xxx.com:80'成功的時間同步:解析後的1275327066705分解到5月31日星期一的系統時間17 :31:06 UTC 2010) at Main $$ anon $ 1 $$ anonfun $ 1.apply(506。Scala:13) at Main $$ anon $ 1 $$ anonfun $ 1.apply(506.scala:13) at scala.collection.Iterator $ class.exists(Iterator.scala:655) at scala.collection.Iterator $ GroupedIterator.exists(Iterator.scala:772) –
@fred,我添加了'case _ => false'來處理短文件。 – huynhjl