2016-08-16 3 views
0

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

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

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

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

9,9999999999999995 е-007 1e-010

+0

Не могли бы вы загрузить весь файл где-нибудь? Чтобы увидеть пример полного контента. На http://pastebin.com/ например – Drarig29

+0

см. Это http://stackoverflow.com/questions/22926306/replace-a-word-from-a-specific-line-in-a-text-file – Mangrio

+0

@ Darig29 http://pastebin.com/raw/Y3YZcaS2 Это небольшой пример –

ответ

1

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

Спасибо. Это работа для меня. –

+0

Но этот метод читает весь целевой файл в памяти, а затем записывает его снова, да? –

+0

Если вам нужно записать в тот же файл (например, обновить существующий файл), вы должны материализоваться ('.ToList()' и прочитать весь файл в памяти); если вы пишете в * другой * файл, вы можете удалить '.ToList()' –

0

предположим, вы читаете файл и получить 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!