[英]comparing two text files
我有兩個文本文件bala.txt
和bala1.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.txt
和ra.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.