替换.txt文件中的字符串

时间:2015-04-27 15:25:53

标签: c# io

所以我的目标是编写一个C#程序,它将读取包含数千行的.txt文件,并重新格式化某些条件行。

我会读取每一行并检查此行是否包含1901,如果有,我想对该行进行更改。

例如这一行,

 T1.hello < 1901, AS bye

我想用它替换它,

 T2.hello AS bye

在这种情况下,hellobye是我要保留的两个数据,并且从T1.data1 < 1901, AS data2T2.data1 AS data2的转接格式当且仅当旧的时候行包含1901

请注意data1data2可以是任何数据,但并不总是hellobye

我从来没有在C#中使用IO,所以我的想法已经用完了,到目前为止,我的代码如下,我被困在我的代码的if语句中,我需要一些指导如何处理这种情况:

string path = @"C:\Users\jzhu\Desktop\test1.txt";
StreamReader reader = new StreamReader(File.OpenRead(path));
string fileContent = reader.ReadToEnd();
reader.Close();
List<string> lines = new List<string>(File.ReadAllLines(path));
for (int i = 0; i < lines.Count; i++)
{
     if(lines[i].Contains("1901"))
     {         
         //here is the part I need guidance
     }
}
StreamWriter writer = new StreamWriter(File.Create(path));
writer.Write(fileContent);
writer.Close();

3 个答案:

答案 0 :(得分:2)

你可以做的是

StringBuilder sb = new StringBuilder();
for (int i = 0; i < lines.Count; i++)
{
    if(lines[i].Contains("1901"))
    {         
         sb.AppendLine(lines[i].Replace("< 1901,",""));
    }
    else
    {
        sb.AppendLine(lines[i]);
    }
}

using (StreamWriter writer = new StreamWriter(path))
{
    writer.Write(sb.ToString());
}

这将假设您知道要用空字符串替换“&lt; 1901”。

答案 1 :(得分:1)

我认为这是正则表达式的一种情况,因为您希望在T1之后捕获可变数量的数据并保留它。尝试这样的事情:

string pattern = "T1.([^ ]+) < 1901,( .*)";
Regex rgx = new Regex(pattern);
for (int i = 0; i < lines.Count; i++)
{
    Match m = rgx.Match(lines[i]);
    if (m.Success == true) {
        lines[i] = rgx.Replace(lines[i],"T2." + m.Groups[1] + m.Groups[2]);
    }
}

模式中() s中的内容是将被捕获的内容,成为Match对象上的组(匹配中的第一个组 - 索引0 - 是整个匹配的本身)。

所以([^ ]+)在&#39; T1&#39;之后找到所有内容。在遇到空格并将其填入Match组2(索引1)之前,这不是空格。

( .*)在&#39; 1901之后发现,以空格开头,随后重复任何次数.*,并将其填入第3组(索引2) )。由于这些项目保存在组中,因此您现在可以在编写替换字符串时检索它们。

答案 2 :(得分:0)

使用Regex.Replace

string path = @"C:\Users\jzhu\Desktop\test1.txt";
List<string> lines = new List<string>(File.ReadAllLines(path));
for (int i = 0; i < lines.Count; i++)
{
     lines[i] = Regex.Replace(lines[i], @"T1\.([^ ]*) < 1901, AS", "T2.$1 AS");
}
File.WriteAllLines(path, lines);