Редактировать конкретное слово в конкретной строке

Я знаю, что об этом спрашивали несколько раз, но мне нужен быстрый способ сделать это в файлах с различным размером (маленькие и большие файлы).

Мне нужно отредактировать масштабный коэффициент в файле Sat(TXT). Это первое число в третьей строке:

700 104 1 0 16 Autodesk AutoCAD 19 ASM 221.0.0.1871 NT 24 Вт.

16 августа 09:02:14 2016

1000 9.9999999999999995e-007 1e-010

2 ответа

Решение

Я предлагаю извлечь метод и 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);

Предположим, что вы прочитали свой файл и получите String[] называется file и число, которое вы хотите изменить, представляется как 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 вернуться к настоящему файлу.

Примечание: это не изменит file, если в данной строке первый параметр недопустим float!

Другие вопросы по тегам