我知道这已被问了几次,但我需要一种快速方式在具有不同大小(小文件和大文件)的文件中执行此操作。在特定行中编辑特定单词
我需要在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
我知道这已被问了几次,但我需要一种快速方式在具有不同大小(小文件和大文件)的文件中执行此操作。在特定行中编辑特定单词
我需要在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
我建议提取方法和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);
谢谢。这对我有用。 –
但是,这种方法将整个目标文件读入内存然后再写出来,是吗? –
如果你必须写入同一个文件(即更新现有文件),你必须实现('.ToList()'并将整个文件读到内存中)。如果你写* *不同*文件,你可以放弃'.ToList()' –
假定你读你的文件,并得到一个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
!
你能上传整个文件的地方?查看完整内容的示例。在http://pastebin.com/例如 – Drarig29
请参阅http://stackoverflow.com/questions/22926306/replace-a-word-from-a-specific-line-in-a-text-file – Mangrio
@ Darig29 http://pastebin.com/raw/Y3YZcaS2 这是一个小例子 –