我正在尝试使用制表符分隔的txt文件中的第3列对数据进行排序。尝试了几种方法,不知道我是如何使用第3列对其进行排序的。现在已经使用第一个进行了排序。另外我需要删除第3列中的重复项(Case sensitiver,即riVEr与River不同)这是我的代码到目前为止。我会在得到进展后立即作为答案。谢谢;)
string[] lines = File.ReadAllLines(@"d:\instance_test.txt");
//Dictionary<String, Int32> EAR_appcode = new Dictionary<String, Int32>();
//Console.WriteLine();
//Console.ReadLine();
//// Display the file contents by using a foreach loop.
//System.Console.WriteLine("Contents of WriteLines2.txt = ");
//foreach (string line in lines)
//{
// // Use a tab to indent each line of the file.
// Console.WriteLine("\t" + line.Substring(4));
// Console.ReadLine();
//}
var no = lines;
var orderedScores = lines.OrderBy(x => x.Split(' ')[0]);
//string result = Regex.Split(no, @"[,\t ]+");
foreach (var score in orderedScores)
{
string replacement = Regex.Replace(score, @"\t|\n|\r", " ");
DataTable table = new DataTable();
table.Columns.Add("myCol", typeof(string));
table.Columns.Add("myCol2", typeof(string));
table.Columns.Add("EAR_appcode", typeof(string));
table.Rows.Add(11, "abc11");
table.Rows.Add(13, "abc13");
table.Rows.Add(12, "abc12");
Console.WriteLine(replacement) ;
Console.ReadLine();
}
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
答案 0 :(得分:0)
类似的东西:
// read lines somehow
// ...
// create a list
var list = new List<Tuple<string, string, string>>();
foreach(string line in lines)
{
var split = line.Split('\x9');
list.Add(new Tuple(split[0], split[1], split[2]));
}
// sort
list = list.OrderBy(x => x.Item3);
// remove duplicates
for(int i = 1; i < list.Count; i++)
if(list[i].Item3 == list[i-1].Item3)
list.RemoveAt(i);
我相信以上所有内容都可以通过一个linq表达式来完成,但我的表现非常糟糕。无论如何都要偷走OrderBy
部分^^。
如果您没有.Net Framework 4.0,则将Tuple
替换为非通用版本(声明列表为List<Tuple>
):
class Tuple
{
public string Item1;
public string Item2;
public string Item3;
public Tuple(string i1, string i2, string i3)
{
Item1 = i1;
Item2 = i2;
Item3 = i3;
}
}
答案 1 :(得分:0)
这是我的样本数据:
Col1 Col2 Col3
zxcv 789 14:02
asdf 123 12:00
qwer 456 13:01
asdf 123 12:00
我使用这个LINQ语句:
按第3列排序
static void Main(string[] args)
{
string[] lines = File.ReadAllLines("Tab.txt");
int start = 1; // set to zero, if no header
var records = (from i in Enumerable.Range(start, lines.Length - 1)
let pieces = lines[i].Split('\t')
select new { Col1 = pieces[0], Col2 = pieces[1], Col3 = pieces[2] })
.GroupBy(c => c.Col1 + c.Col2 + c.Col3)
.Select(gr => gr.First())
.OrderBy(c => c.Col3);
foreach (var r in records)
Console.WriteLine("{0}, {1}, {2}", r.Col1, r.Col2, r.Col3);
Console.WriteLine();
Console.WriteLine("Done");
Console.ReadLine();
}
当然,您可以在LINQ语句的最后一行添加解析/转换代码,以按int或DateTime排序。
我测试了它......