逐行比较2个文本文件,并在true或false时替换

时间:2010-12-13 16:54:01

标签: c#

我有2个文本(ini)文件要比较。第一个读取

NUMM=1
DURC=360
VORS=2500
SPAN=130

第二个读取

NUMM=0
DURC=340
VORS=3000
SPAN=140

在第三个文件中我说第一个文件中的哪个数据应该在第二个文件中替换为true或false

NUMM=false
DURC=true
VORS=true
SPAN=false

替换后第二个文件的结果应为

NUMM=1
DURC=340
VORS=3000
SPAN=130

我尝试了几种方法,但无法在C#

中解决这个问题

4 个答案:

答案 0 :(得分:2)

我会做什么:

首先,读取并分割true / false文件,以创建名为htTrueFalse的HashTable。

然后,读取并拆分第一个文件,以创建名为htReplace的HashTable。

最后,读取并拆分第二个文件,对于每个键,如果需要替换,则从htTrueFalse获取,如果需要,从htReplace获取键的值,并将其替换为结果文件

嗯......我不确定这是否特别清楚,如果没有,请不要犹豫,问一个例子。

答案 1 :(得分:0)

你可以这样做。

var file1 = new StreamReader(filename1);
var file2 = new StreamReader(filename2);
var file3 = new StreamReader(filename3);
var output = string.Empty;
var line = string.Empty;

while((line = file1.ReadLine()) != null)
{
    var replace = file3.ReadLine.Split('=')[1];
    if(replace == "true")
    {
        output += file2.ReadLine() + "\r\n";
    }
    else
    {
        output += line + "\r\n";
    }
}

file1.Close;
file2.Close;
file3.Close;

var file4 = new StreamWriter(filename4);
file4.Write(output);
file4.Close;

希望这有帮助。

答案 2 :(得分:0)

这就是我要做的事情:

System.Collections.Generic.List<string> fileToWrite = new List<string>();
string[] file1 = System.IO.File.ReadAllLines(filePath);
string[] file2 = System.IO.File.ReadAllLines(anotherFilePath);
string[] fileWithTrueFalse = System.IO.File.ReadAllLines(fileWithTrueFalsePath);
for (int i = 0; i < file1.Length; i++)
{
    if (fileWithTrueFalse[i].Substring(fileWithTrueFalse[i].IndexOf('=') + 1) == "true")
        fileToWrite.Add(file2[i]);
    else
        fileToWrite.Add(file1[i]);
}
System.IO.File.WriteAllLines(fileToWritePath, fileToWrite.ToArray());

答案 3 :(得分:0)

使用LINQ获取最终输出,然后将其写入文件。

public class TempList
{
    public TempList(string key1, string data1)
    {
        key = key1;
        data = data1;
    }
    public TempList()
    { }

    public string key;
    public string data;
}
{
    System.Collections.Generic.List<TempList> list1 = new System.Collections.Generic.List<TempList>();
        list1.Add(new TempList("NUMM", "1"));
        list1.Add(new TempList("DURC", "360"));
        list1.Add(new TempList("VORC", "2500"));

        System.Collections.Generic.List<TempList> list2 = new System.Collections.Generic.List<TempList>();
        list2.Add(new TempList("NUMM", "0"));
        list2.Add(new TempList("DURC", "340"));
        list2.Add(new TempList("VORC", "3000"));

        System.Collections.Generic.List<TempList> list3 = new System.Collections.Generic.List<TempList>();
        list3.Add(new TempList("NUMM", "false"));
        list3.Add(new TempList("DURC", "true"));
        list3.Add(new TempList("VORC", "false"));

        System.Collections.Generic.List<TempList> p = (from q in list1
                join w in list2 on q.key equals w.key
                join r in list3 on q.key equals r.key
                select new TempList
                {
                    key = q.key,
                    data = (r.data == "true") ? w.data : q.data
                }).ToList<TempList>();
    }

使用Textreader从CSV文件和TextWriter填充list1,list2和list3,将最终输出p写入文件。