在文件中查找字符串,替换“=”后的所有内容?

时间:2012-11-26 15:26:46

标签: file scala io replace

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

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

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代码来编写它。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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)