gpt4 book ai didi

scala - 更改scala中文件的内容

转载 作者:行者123 更新时间:2023-12-03 03:49:53 24 4
gpt4 key购买 nike

我见过this question但我不完全确定我可以通过提供的答案实现我想要的目标。

注意,这只是学习Scala的一次经历。我为您提供的示例可能没有意义。

我想打开我的 ~/.subversion/servers 文件,如果我发现一行包含“proxy”一词,我想对其进行评论(基本上我只想在前面添加字符“#”)。其他所有行必须保持原样。

所以,这个文件:

Line 1
Line 2
http-proxy-host = defaultproxy.whatever.com
Line 3

会变成:

Line 1
Line 2
# http-proxy-host = defaultproxy.whatever.com
Line 3

我能够读取该文件,找到我想要更改的行并打印它们。这是我到目前为止所做的:

val fileToFilter = new File(filePath)

io.Source.fromFile(fileToFilter)
.getLines
.filter( line => !line.startsWith("#"))
.filter( line => line.toLowerCase().contains("proxy") )
.map( line => "#" + line )
.foreach( line => println( line ) )

我错过了两件事:

  1. 如何保存对文件所做的更改(我可以直接执行此操作,还是需要将更改复制到临时文件,然后用该临时文件替换“服务器”文件?)<
  2. 如何有条件地应用“ map ”(如果我发现“代理”一词,我会在前面添加“#”,否则我会按原样保留该行)。

这可能吗?我是否遵循正确的方法来解决这个问题?

非常感谢。

最佳答案

  1. 保存到其他文件并将其重命名回原始文件。
  2. 使用if-else

这应该有效:

import java.io.File
import java.io.PrintWriter
import scala.io.Source

val f1 = "svn.txt" // Original File
val f2 = new File("/tmp/abc.txt") // Temporary File
val w = new PrintWriter(f2)
Source.fromFile(f1).getLines
.map { x => if(x.contains("proxy")) s"# $x" else x }
.foreach(x => w.println(x))
w.close()
f2.renameTo(f1)

关于scala - 更改scala中文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33847432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com