0

我想读取一个文件,找到一些字符串并替换此行中符号“=”之后的所有内容。

假设我有一个这样的文本文件:

name=whatever
age=150
id.from.system=10298092_42_42

path=D:\name\somewhere
whatever_A= WHATEVER

可以说我想改变路径。起初我必须找到字符串“path”,然后以某种方式替换“=”之后的所有内容。有任何想法吗?我知道我可以轻松地逐行读取文件,如下所示:

val source = io.Source.fromFile("C:/myfile.txt)
val lines = source.mkString
source.close()

但这可能不是最好的主意,因为读取整个文件的性能并不好(可能文件有 10000000 行,并且字符串已经在第 2 行,但我的程序会读取整个文件。那是不必要的) .

并且可能还有另一个问题:如果我搜索特定的字符串,比如这里的“名称”,但这些字符串存在多次。我想确保它唯一有效的是字符串后面有一个“=”。也许我总是可以搜索最后带有“=”的东西,这可以解决问题。但我不知道如何用一个不错的 scala 代码来编写它。

4

2 回答 2

2

您可以使用迭代器进行迭代,直到找到您要查找的行。

val source = io.Source.fromFile("somePath").getLines
val line = source.find(_.startsWith("path="))

line 将包含以“path =”开头的第一行。

于 2012-11-26T16:04:43.030 回答
1

如果您的 C:/myfile.txt 包含该行path=D:\name\somewhere,则可以替换D:\name\somewhere为以下代码:

val lines = fromString("path=D:\\name\\somewhere").getLines // use fromFile here 
for { in <- lines
      out <- if (in startsWith("path=")) "path=D:\\my\\path" else in
} yield out

此示例将返回字符串

path=D:\my\path

您需要使用fromFile来获取这些行并将这些行写入一个新文件。

这是完成同样事情的另一种方法:

val lines = fromString("path=D:\\name\\somewhere").getLines
lines.map(in => if (in startsWith("path=")) "path=D:\\my\\path" else in)
于 2012-12-01T16:21:44.100 回答