0

我正在尝试在 C# 中创建一个程序,该程序从文本文件中读取文本行并将它们存储在列表中。然后我必须将每一行与另一个同样大(50 行)的文本文件进行比较,并将差异显示在屏幕上?有人可以帮忙吗?将不胜感激。到目前为止,我只能读取文件。

    TextReader tr = new StreamReader("file1.txt");
        for (var i = 0; i < 1; i++)
        {
            tr.ReadLine();
        }
    TextReader tra = new StreamReader("file2.txt");
        for (var f = 0; f < 1; f++)
        {
            tra.ReadLine();
        }
4

3 回答 3

1

只有一个字符(一个文件中的测验答案,另一个文件中的答案键

var count = File.ReadLines("file1.txt")
                 .Zip(File.ReadLines("file2.txt"), (f1, f2) => f1 == f2)
                 .Count(b => b);

输入:file1.txt

a
a
c
d

输入:file2.txt

a
a
b
d

输出:

3


编辑@AlexeiLevenkov

var two = new[] { true, false }.Count();
var one = new[] { true, false }.Count(b => b);
于 2013-01-23T21:49:58.067 回答
0
List<string> testlist1 = new List<string>();
List<string> testlist2 = new List<string>();
//populate Lists
for (int i = 0; i < testlist1.Count; i++)
{
     if (testlist2[i] == testlist1[i])
          //do something
     else
         //do something else
}
于 2013-01-24T16:38:47.580 回答
0

您可以创建简单的类来保存必要的数据。在这个类中,我们存储每个文件中的行并Color指示是否相等。

public class LineComparer
{
        public string Line1 { get; set; }
        public string Line2 { get; set; }
        public Brush Color { get; set; }
}

在下一步中,您必须使用文件中的数据填充列表:

public List<LineComparer> _comparer = new List<LineComparer>();

public void ReadFiles()
{
    TextReader tr1 = new StreamReader("file1.txt");
    TextReader tr2 = new StreamReader("file2.txt");

    string line1, line2 = null;

    while ((line1 = tr1.ReadLine()) != null)
    {
        _comparer.Add(new LineComparer{ Line1 = line1 });
    }

    int index = 0;

    while ((line2 = tr2.ReadLine()) != null)
    {
        if(index < _comparer.Count)
            _comparer[index].Line2 = line2;
        else
            _comparer.Add(new LineComparer{ Line2 = line2 });
        index++;
    }

    tr1.Close();
    tr2.Close();

    _comparer.ForEach(x => { if(x.Line1 != x.Line2) x.Color = new SolidColorBrush(Colors.Red); else x.Color = new SolidColorBrush(Colors.Green); });
}

要显示文件差异,您可以ListBox使用ItemTemplate

<ListBox ItemsSource="{Binding}"
         Grid.IsSharedSizeScope="True"
         >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid Background="{Binding Color}">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" SharedSizeGroup="A" />
                    <ColumnDefinition Width="10" />
                    <ColumnDefinition Width="*" SharedSizeGroup="B" />
                </Grid.ColumnDefinitions>

                <TextBlock Text="{Binding Line1}" 
                           TextWrapping="Wrap" />

                <TextBlock Text="{Binding Line2}" 
                           TextWrapping="Wrap"
                           Grid.Column="2"
                           />
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

例子:

“file1.txt”:

First
Second
Third
Fourth
Fifth
Sixth
Seventh

“文件2.txt”:

First
second
Third
Fourth
Fifth

结果是:

在此处输入图像描述

是示例解决方案(FileComparer.zip)。

于 2013-01-23T21:59:20.190 回答