在特定行中编辑特定单词

Edit specific word in specific line

我知道这个问题已经被问过几次了,但我需要一种快速的方法来处理不同大小的文件(小文件和大文件)。

我需要在 sat(txt) 文件中编辑比例因子。这是第三行的第一个数字:

700 104 1 0 16 Autodesk AutoCAD 19 ASM 221.0.0.1871 NT 24 Tue

Aug 16 09:02:14 2016

1000 9.9999999999999995e-007 1e-010

假设您读取文件并得到一个名为 fileString[] 并且您要修改的数字表示为 float.

你可以使用下面的代码先提取你想要的行。在此之后,您可以通过 float.TryParse(..)

获得号码
int lineWithParam = 3;

String[] splittedLine = (file[lineWithParam-1]).Split(new char[] { ' ' }, 2);

if(splittedLine.Length == 2)
{
    float fact = 0.0f;

    String newFact = splittedLine[0];

    // or how ever you want to modify your factor
    if(float.TryParse(splittedLine[0], out fact))   
    {
        newFact = "" + (fact * 12.3f);

    }

    file[lineWithParam-1] = newFact + " " + splittedLine[1];
}

这是一个可执行示例:https://dotnetfiddle.net/NVgETo

之后您可以将 String[] file 写回真实文件。

注意: 如果在给定行中第一个参数不是有效的 float![=19,这将不会修改 file =]

我建议提取一个方法和Linq:

private static String MyEditLine(string value) {
  var items = value.Split(new char[] { ' ' }, 2);

  items[0] = "2000"; // let's change 1000 into 2000

  return string.Join(" ", items);
}

...

var target = File
  .ReadLines(@"C:\MyFile.txt")
  .Select((line, index) => index != 2
     ? line
     : MyEditLine(line))
  .ToList(); 

File.WriteAllLines(@"C:\MyFile.txt", target);