簡體   English   中英

比較兩個文本文件

[英]comparing two text files

我有兩個文本文件bala.txtbala1.txt

bala.txt逐行包含文本為

balamurugan,rajendran,chendurpandian
christopher
updateba

bala1.txt逐行包含文本為

ba

在這里,我需要使用bala.txt檢查bala1.txt並寫入日志文件為

LineNo : 0 : balamurugan,rajendran,chendurpandian
LineNo : 2 : updateba

現在它只寫一行

LineNo : 0 : balamurugan,rajendran,chendurpandian

之后,while循環消失了

這是我的代碼

while (((line = file.ReadLine()) != null & (line2 = file2.ReadLine()) != null))
                        {
                            if (line.Contains(line2))
                            {
                                dest.WriteLine("LineNo : " + counter.ToString() + " : " + line + "<br />");
                            }
                            counter++;
                        }

有什么建議嗎?

編輯:

string FilePath = txtBoxInput.Text;
    string Filepath2 = TextBox1.Text;
    int counter = 0;
    string line;
    string line2;


        DirectoryInfo Folder = new DirectoryInfo(textboxPath.Text);
        var dir = @"D:\New folder\log";

        if (Folder.Exists)
        {
            if (!Directory.Exists(dir))
                Directory.CreateDirectory(dir);
        }
        if (File.Exists(FilePath) & File.Exists(Filepath2))
        {
            // Read the file and display it line by line.
            using (var file = File.OpenText(FilePath))
            using (var file2 = File.OpenText(Filepath2))
            using (var dest = File.AppendText(Path.Combine(dir, "log.txt")))
            {
                while (((line = file.ReadLine()) != null & (line2 = file2.ReadLine()) != null))
                {
                    if (line.Contains(line2))
                    {
                        dest.WriteLine("LineNo : " + counter.ToString() + " : " + line + "<br />");
                    }

                    counter++;
                }

            }

}

EDIT(2):我需要在文件夾日志中創建兩個文本文件,並將其作為ba.txt寫入文本文件,其內容為

LineNo : 0 : balamurugan,rajendran,chendurpandian
LineNo : 2 : updateba

ra.txt ,內容為

LineNo : 0 : balamurugan,rajendran,chendurpandian

有什么建議嗎?

EDIT(3):我需要創建一個名為Log through code的文件夾, ra.txt必須在該日志文件夾中創建ba.txtra.txt

第二個文件讀取器的基礎流正在到達流的末尾,並且在循環的下一次迭代之前不會被重置。 在比較它們之前,您需要將每個文件的所有行復制到內存中。 嘗試這個:

List<string> file1Lines = new List<string>();
List<string> file2Lines = new List<string>();

while ((line = file.ReadLine()) != null)
{
    file1Lines.Add(line);
}

while ((line2 = file2.ReadLine()) != null)
{
    file2Lines.Add(line2);
}

foreach (string f1line in file1Lines)
{
    foreach (string f2line in file2Lines)
    {
        if (f1line.Contains(f2line))
        {
            dest.WriteLine("LineNo : " + counter.ToString() + " : " + f1line + "<br />");
        }

    }
    counter++;
}

嘗試這個:

string FilePath = txtBoxInput.Text, Filepath2 = TextBox1.Text;
int counter = 0;
string line, line2;

DirectoryInfo Folder = new DirectoryInfo(textboxPath.Text);
var dir = @"D:\New folder\log";

if (Folder.Exists)
    if (!Directory.Exists(dir)) Directory.CreateDirectory(dir);

if (File.Exists(FilePath) && File.Exists(Filepath2))
{   // Read the file and display it line by line.
    using (var file = File.OpenText(FilePath))
    {
        using (var file2 = File.OpenText(Filepath2))
        {
            while((line2 = file2.ReadLine()) != null)
            {
                //YOU NEED TO CHECK IF FILE ALREADY EXISTS
                // AND YOU WANT TO OVERWRITE OR CREATE NEW
                //WITH SOME OTHER NAME
                //---------------------------------------CREATE NEW FILE FOR
                //---------------------------------------EACH LINE IN file2
                using (var dest = File.AppendText(Path.Combine(dir, line2 + ".txt")))
                {
                    while ((line = file.ReadLine()) != null)
                    {
                        if (line.Contains(line2))
                            dest.WriteLine("LineNo : " + 
                                counter.ToString() + " : " + line + "<br />");
                        counter++;
                    }
                    //IF THE SECOND FILE ONLY CONTAINS 1 LINE THEN YOU
                    //DON'T NEED THIS.
                    //we need to go to begning of first file
                    file.BaseStream.Seek(0, SeekOrigin.Begin);
                    counter = 0;
                }
            }
        }
    }
}

編輯:從用戶獲取文件路徑。

如果要獲取目錄名稱來保存日志文件,則提供一個“打開文件”對話框以選擇文件或文件夾瀏覽器對話框。

//OPEN FILE -- you will need two buttons one 
//for each text boxes
void btnFile_Click(object sender, EventArgs e)
{
    var fbd = new OpenFileDialog();
    fbd.Multiselect = false;
    fbd.CheckFileExists = true;
    fbd.CheckPathExists = true;
    if(fbd.ShowDialog()==DialogResult.Ok)
    {
        textBox1.Text = fbd.FileName;
    }
}

//SELECT FOLDER
string _logFolderPath;//use this inplace of @"D:\new folder\log";
void btnFolder_click(object sender, EventArgs e)
{
    var fd = new FolderBrowserDialog();
    if(fd.ShowDialog()==DialogResult.OK)
    {
        _logFolderPath = fd.SelectedPath;
    }
}
private void Comparer(string fileLocation1, string fileLocation2, string resultLocation)
{
    StreamReader source = new StreamReader(fileLocation1);
    StreamReader pattern = new StreamReader(fileLocation2);
    StreamWriter result = File.CreateText(resultLocation);

    //reading patterns
    List<String> T = new List<string>();
    string line;
    while ((line = pattern.ReadLine()) != null)
        T.Add(line);
    pattern.Close();

    //finding matches and write them in output
    int counter = 0;
    while ((line = source.ReadLine()) != null)
    {
        foreach (string pat in T)
        {
            if (line.Contains(pat))
            {
                result.WriteLine("LineNo : " + counter.ToString() + " : " + line);
                break; //just if you want distinct output
            }
        }
        counter++;
    }

    source.Close();
    result.Close();
}

- - - - - - - - - - - - - - 編輯 - - - - - - - - - - - -------------對於您在評論中提到的那個

private void Comparer(string fileLocation1, string fileLocation2, string resultFolder)
{
    StreamReader source = new StreamReader(fileLocation1);
    StreamReader pattern = new StreamReader(fileLocation2);
    Directory.CreateDirectory(resultFolder);
    //reading patterns
    List<String> T = new List<string>();
    string line;
    while ((line = pattern.ReadLine()) != null)
        T.Add(line);
    pattern.Close();

    //finding matches and write them in output
    int counter;
    foreach (string pat in T)
    {
        StreamWriter result = File.CreateText(Path.Combine(resultFolder, pat + ".txt"));
        source.BaseStream.Position = counter = 0;
        while ((line = source.ReadLine()) != null)
        {
            if (line.Contains(pat))
                result.WriteLine("LineNo : " + counter.ToString() + " : " + line);
            counter++;
        }
        result.Close();
    }
    source.Close();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM