有两个TXT文件A和B,两个文件的内容每行字段间都是以TAB键分隔(A,B文件的行内容有可能相同,也可能不同),要求比较两个文件每行的内容,如果该行既在A中也在B中则把该行写入到文件C中,如果该行在A中不在B中也把该行写入文件C中,如果该行在B中不在A中也把该行写入文件C中。即和并A和B两个文件到C中,但不能有重复的行。我的实现的方法是读取文件A和B的内容放在DataTable dt1和dt2中,然后://这次循环从dt1开始
for(int i=0;i<dt1.Rows.Count;i++)
{
bool same=false;
for(int j=0;j<dt2.Rows.Count;j++)
{
if(dt1.Rows[i].ItemArray[0].ToString() == dt2.Rows[j].ItemArray[0].ToString()
{
//相同的写入文件C
same=true;
}
}
if(same=false)
{
//此时可以把在A文件中不在B文件中的内容行比较出来写入C中,但是无法比较在B中不在A中的内容行,所以才有下面的又一次循环
}
}
//这次循环从dt2开始,主要是为了比较把在文件B中不在文件A中的内容行找出并写入文件C中
for(int i=0;i<dt2.Rows.Count;i++)
{
bool same=false;
for(int j=0;j<dt1.Rows.Count;j++)
{
if(dt1.Rows[i].ItemArray[0].ToString() == dt2.Rows[j].ItemArray[0].ToString()
{
//不需要再把相同的写入C中了,上一次循环已经把相同的写入C了
same=true;
} }
if(same=false)
{
//此时可以把在文件B中不在文件A中的内容行找出来并写入C文件
}
}
这样写是可以实现功能的,但是个人感觉这样写代码有些冗余,有没有更加简单的思路把文件A和B中内容行合并到文件C中,C文件中每行内容不能重复。
for(int i=0;i<dt1.Rows.Count;i++)
{
bool same=false;
for(int j=0;j<dt2.Rows.Count;j++)
{
if(dt1.Rows[i].ItemArray[0].ToString() == dt2.Rows[j].ItemArray[0].ToString()
{
//相同的写入文件C
same=true;
}
}
if(same=false)
{
//此时可以把在A文件中不在B文件中的内容行比较出来写入C中,但是无法比较在B中不在A中的内容行,所以才有下面的又一次循环
}
}
//这次循环从dt2开始,主要是为了比较把在文件B中不在文件A中的内容行找出并写入文件C中
for(int i=0;i<dt2.Rows.Count;i++)
{
bool same=false;
for(int j=0;j<dt1.Rows.Count;j++)
{
if(dt1.Rows[i].ItemArray[0].ToString() == dt2.Rows[j].ItemArray[0].ToString()
{
//不需要再把相同的写入C中了,上一次循环已经把相同的写入C了
same=true;
} }
if(same=false)
{
//此时可以把在文件B中不在文件A中的内容行找出来并写入C文件
}
}
这样写是可以实现功能的,但是个人感觉这样写代码有些冗余,有没有更加简单的思路把文件A和B中内容行合并到文件C中,C文件中每行内容不能重复。
// Concatenate and remove duplicate names based on
// default string comparer.
IEnumerable<string> uniqueNamesQuery =
fileA.Union(fileB).OrderBy(s => s);
OutputQueryResults(uniqueNamesQuery, "Union removes duplicate names:");
http://msdn.microsoft.com/zh-cn/library/bb546148.aspx