怎么用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#,能不能再说具体点或给点代码了? 展开
a 4
b 3
我把第一个文件中的4提取出来和其他3个文件相同位置上的数去比较,如果这个4最大的话,就把这一行的a 4字段加到list列表的第一行(我已经定义了一个包含这两个字段的类).然后就这么一直比较下去直到最后一行。
总之,我最后要的结果就是把这几个文件合成一个文件并按降序排列。
我也是菜鸟~
还是给点代码吧。。。
还有文件数目是不定的,每个文件已经按降序排好的~
请问chenxq5210 你的2、3步我有点看不明白,我刚刚接触C#,能不能再说具体点或给点代码了? 展开
6个回答
展开全部
修改了下代码,现在各文件行数不一致也没问题了:
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;
}
}
}
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;
}
}
}
展开全部
题目很简单,但实现起来代码量可不小,解题思路你自己基本上已经有了,给你补充完整一下吧。
1、把txt文件放到指定目录,然后遍历这个目录取得所有需要比较的txt文件。
2、建立一个list[]变量,读取txt内容并格式化后写入list[]
3、比较list[]中各list相同位置的数值大小,将最大值写入一个新的list变量中
4、对list变量进行排序(因为各文件的数量不尽相同,得到的数据排序已混乱)
5、将排序后的list输出到指定的txt中
注:如果涉及到行数不一样,需要加一个检测语句防止错误。
1、把txt文件放到指定目录,然后遍历这个目录取得所有需要比较的txt文件。
2、建立一个list[]变量,读取txt内容并格式化后写入list[]
3、比较list[]中各list相同位置的数值大小,将最大值写入一个新的list变量中
4、对list变量进行排序(因为各文件的数量不尽相同,得到的数据排序已混乱)
5、将排序后的list输出到指定的txt中
注:如果涉及到行数不一样,需要加一个检测语句防止错误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给你说个简单的思路,初学者比较实用。
就是用一个数组,或者直接哟给你ListBox。依次读取文件,第一个文件打开后将数据存入List或者数组,从第二个文件开始,进行比对,如果相同项目有更大的值,则替换。
最终你得到的就是你所说的。
我只是给你个思路,希望对你有用。
就是用一个数组,或者直接哟给你ListBox。依次读取文件,第一个文件打开后将数据存入List或者数组,从第二个文件开始,进行比对,如果相同项目有更大的值,则替换。
最终你得到的就是你所说的。
我只是给你个思路,希望对你有用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先全部读入到内存好了, 用现有的数组做缓冲,它本身也带了sort功能,传递一个判定自定义大小的委托就好了。 完了删掉4个文件呗,重新生成一个新的合并后的文件。
看你描述得挺清晰地,应该不用贴代码了吧。
希望能帮上你的忙。
看你描述得挺清晰地,应该不用贴代码了吧。
希望能帮上你的忙。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以用一个二维数组array[m][n],(m为文件数,n为行数)对0<i<n,取得array[0][i]-array[m][i]中最大的一个,如果行数不一样,n为最大行数,并要考虑空的判断
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用泛型List<T>吧,前面几楼都说的好明白了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询