0

ファイルを読み取り、いくつかの文字列を見つけて、この行の記号「=」の後にあるすべてのものを置き換えたいと思います。

次のようなテキストファイルがあるとします。

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

path=D:\name\somewhere
whatever_A= WHATEVER

パスを変更したいとしましょう。最初に文字列「path」を見つけてから、「=」の後のすべてをなんとかして置き換える必要があります。何か案は?次のように、ファイルを1行ずつ簡単に読み取ることができます。

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

しかし、これはおそらく最善のアイデアではありません。ファイル全体を読み取るのにそれほどパフォーマンスが良くないためです(おそらく、ファイルは10000000行で、文字列はすでに2行目にありますが、私のプログラムはファイル全体を読み取ります。これは不要です) 。

そして、おそらく別の問題があります。Imが特定の文字列を検索している場合、たとえばここで「名前」を検索しますが、これらの文字列は数回存在します。文字列の後に「=」がある場合にのみ有効であることを確認したいと思います。たぶん、最後に「=」が付いているものを常に検索して、問題を解決できるかもしれません。しかし、これを素敵なscalaコードで書く方法がわかりません。

4

2 に答える 2

2

イテレータを使用して、探している行が見つかるまで繰り返すことができます。

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

行には、「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 に答える