有人能告诉我如何编辑文本文档中的特定行吗? 例如,假设我的文档包含两个电话号码:
“0889367882
0887343160"
我想删除第二个号码并写一个新的电话号码,我该怎么做? 我正在打印文档中的文本,但我不知道如何选择要编辑的行 以及如何做到这一点。
string path = @"C:\Users\...\text1.txt";
string[] lines = File.ReadAllLines(path);
int i = 0;
foreach (var line in lines)
{
i++;
Console.WriteLine("{0}. {1}", i, line);
}
谢谢!
答案 0 :(得分:1)
只需使用string.replace
。
像这样:
if(line.Contains("0887343160")
line = line.Replace("0887343160", "0889367882");
并在replacing
之后,将所有行写回文件中。
答案 1 :(得分:1)
更好的版本是迭代文件中的行而不是将整个文件行加载到内存中。因此,使用迭代器在这里会做得最好。
我们对迭代器对象执行MoveNext()
,并在执行必要的替换逻辑后将迭代器指向的当前行写入文件。
StreamWriter wtr = new StreamWriter("out.txt");
var e = File.ReadLines(path).GetEnumerator();
int lineno = 12; //arbitrary
int counter = 0;
string line = string.Empty;
while(e.MoveNext())
{
counter++;
if(counter == lineno)
line = replaceLogic(e.Current);
else
line = e.Current;
wtr.WriteLine(line);
}
wtr.Close();
答案 2 :(得分:0)
解决方案1:如果您想根据用户输入String
(与文件中的某一行匹配)删除该行,您可以尝试这样做。
string path = @"C:\Data.txt";
string[] lines = File.ReadAllLines(path);
String strRemove = "8971820518";
List<String> lst = new List<String>();
for(int i=0;i<lines.Length;i++)
{
if (!lines[i].Equals(strRemove)) //if string is part of line use Contains()
{
lst.Add(lines[i]);
}
}
File.WriteAllLines(path,lst.ToArray());
解决方案2 :如果您想根据用户输入LineNO
删除该行(与文件中的确切行号匹配),您可以尝试使用
string path = @"C:\Data.txt";
string[] lines = File.ReadAllLines(path);
int iRemoveLineNo = 6;
List<String> lst = new List<String>();
for(int i=0;i<lines.Length;i++)
{
if (iRemoveLineNo-1!=i)
{
lst.Add(lines[i]);
}
}
File.WriteAllLines(path,lst.ToArray());