我想读取一个文件,找到一些字符串并替换此行中符号“=”之后的所有内容。
假设我有一个这样的文本文件:
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代码来编写它。
答案 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)