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

文字は 1 つだけです (1 つのファイルにクイズの答え、もう 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

"file2.txt":

First
second
Third
Fourth
Fifth

結果は次のとおりです。

ここに画像の説明を入力

ソリューションの例(FileComparer.zip) を次に示します。

于 2013-01-23T21:59:20.190 に答える