在特定行中编辑特定单词
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
假设您读取文件并得到一个名为 file
的 String[]
并且您要修改的数字表示为 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);
我知道这个问题已经被问过几次了,但我需要一种快速的方法来处理不同大小的文件(小文件和大文件)。
我需要在 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
假设您读取文件并得到一个名为 file
的 String[]
并且您要修改的数字表示为 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);