2016-08-16 62 views
0

我知道这已被问了几次,但我需要一种快速方式在具有不同大小(小文件和大文件)的文件中执行此操作。在特定行中编辑特定单词

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

700 104 1 0 16的Autodesk的AutoCAD 19 ASM 221.0.0.1871 NT 24周二

年08月16 9时02分14秒2016

9.9999999999999995 E-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