怎么用C#同时打开多个txt文件并比较??逻辑问题!高手进!!

我要同时打开4个txt文件,每个文件的格式都是:a4b3我把第一个文件中的4提取出来和其他3个文件相同位置上的数去比较,如果这个4最大的话,就把这一行的a4字段加到lis... 我要同时打开4个txt文件,每个文件的格式都是:
a 4
b 3
我把第一个文件中的4提取出来和其他3个文件相同位置上的数去比较,如果这个4最大的话,就把这一行的a 4字段加到list列表的第一行(我已经定义了一个包含这两个字段的类).然后就这么一直比较下去直到最后一行。
总之,我最后要的结果就是把这几个文件合成一个文件并按降序排列。
我也是菜鸟~
还是给点代码吧。。。
还有文件数目是不定的,每个文件已经按降序排好的~
请问chenxq5210 你的2、3步我有点看不明白,我刚刚接触C#,能不能再说具体点或给点代码了?
展开
 我来答
你是谁LCqTt
2011-02-16 · TA获得超过602个赞
知道小有建树答主
回答量:604
采纳率:0%
帮助的人:857万
展开全部
修改了下代码,现在各文件行数不一致也没问题了:
using System;
using System.Collections.Generic;
using System.IO;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var fileNames = Directory.GetFiles("D:\\TestFiles", "*.txt");//指向存放txt文件的目录
List<CustomFile> files = new List<CustomFile>();
foreach( var fileName in fileNames )
{
files.Add( new CustomFile( fileName ));
}

var maxRowCount = 0;

foreach (var file in files)
{
if (file.FileRows.Count > maxRowCount)
maxRowCount = file.FileRows.Count;
}

CustomFile result = new CustomFile();

for (var i = 0; i < maxRowCount; i++)
{
var max = 0;
FileRow maxRow = null;
foreach (var file in files)
{
if (file.FileRows.Count > i && file.FileRows[i].Num > max)
{
maxRow = file.FileRows[i];
}
}
if (maxRow != null)
result.FileRows.Add(maxRow);
}

result.WriteToFile("D:\\test.txt");//存放最终结果的文件

}

}

class CustomFile
{
private string m_FileName;
public List<FileRow> FileRows
{
get;
set;
}
public CustomFile()
{
FileRows = new List<FileRow>();
}
public CustomFile(string fileName)
{
m_FileName = fileName;
FileRows = new List<FileRow>();
Initialize();
}
private void Initialize()
{
var rows = File.ReadAllLines(m_FileName);

foreach (var row in rows)
{
var items = row.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
var fileRow = new FileRow
{
Name = items[0],
Num = int.Parse(items[1])
};

FileRows.Add(fileRow);
}
}

public void WriteToFile(string fileName)
{

using (var writer = File.CreateText(fileName))
{
foreach (var row in FileRows)
{
writer.WriteLine("{0}\t{1}", row.Name, row.Num);
}
}
}

}
class FileRow
{
public string Name
{
get;
set;
}
public int Num
{
get;
set;
}
}
}
chenxq5210
2011-02-16 · 超过21用户采纳过TA的回答
知道答主
回答量:75
采纳率:0%
帮助的人:59.2万
展开全部
题目很简单,但实现起来代码量可不小,解题思路你自己基本上已经有了,给你补充完整一下吧。
1、把txt文件放到指定目录,然后遍历这个目录取得所有需要比较的txt文件。
2、建立一个list[]变量,读取txt内容并格式化后写入list[]
3、比较list[]中各list相同位置的数值大小,将最大值写入一个新的list变量中
4、对list变量进行排序(因为各文件的数量不尽相同,得到的数据排序已混乱)
5、将排序后的list输出到指定的txt中

注:如果涉及到行数不一样,需要加一个检测语句防止错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
泳短画友2785
2011-02-15 · TA获得超过231个赞
知道答主
回答量:570
采纳率:0%
帮助的人:363万
展开全部
给你说个简单的思路,初学者比较实用。
就是用一个数组,或者直接哟给你ListBox。依次读取文件,第一个文件打开后将数据存入List或者数组,从第二个文件开始,进行比对,如果相同项目有更大的值,则替换。
最终你得到的就是你所说的。

我只是给你个思路,希望对你有用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
笨蛋程序员
2011-02-15 · TA获得超过140个赞
知道答主
回答量:37
采纳率:0%
帮助的人:0
展开全部
先全部读入到内存好了, 用现有的数组做缓冲,它本身也带了sort功能,传递一个判定自定义大小的委托就好了。 完了删掉4个文件呗,重新生成一个新的合并后的文件。
看你描述得挺清晰地,应该不用贴代码了吧。
希望能帮上你的忙。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wmy24
2011-02-16 · TA获得超过151个赞
知道答主
回答量:31
采纳率:0%
帮助的人:0
展开全部
可以用一个二维数组array[m][n],(m为文件数,n为行数)对0<i<n,取得array[0][i]-array[m][i]中最大的一个,如果行数不一样,n为最大行数,并要考虑空的判断
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
漠主浮沉C9756
2011-02-15 · TA获得超过301个赞
知道小有建树答主
回答量:519
采纳率:100%
帮助的人:259万
展开全部
用泛型List<T>吧,前面几楼都说的好明白了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式