c#对一个制表符分隔的文件进行排序

问题描述:

我看到很多关于排序制表符分隔的主题,但一直无法掌握或理解完成这段代码的任务以及我刚刚在C#中开始的任务。我希望有人能回答这个问题。c#对一个制表符分隔的文件进行排序

我想打开一个文本文件,它是用特定数量的字段制表符分隔的。问题是如何将它与第一列字段进行排序,然后使用第二列进行排序。我希望能够查看列表数组中的字段以进行调试,如果可能的话。我希望这个示例以tab分隔的形式出现。 那当然我想能写回来。

Category Name Category Sub Name Family Sales Description Equipment Tag List Price Price ID 
Fixture Type 2 Basket Sales B2 65 64 366589 
Fixture Type 2 Basket Sales B2 65 64 366595 
Fixture Type 2 Basket Sales B2 65 64 366601 
Fixture Type 2 Basket Sales B2 65 64 366607 
Fixture Type 2 Basket Sales B2 65 64 366613 
Fixture Type 22 Rail Sales X1 10 10 382822 
Device Type 1 Wall Outside Null 360 342 400604 
Device Type 3 Standard Outside Null 180 171 400885 
Device Type 1 Wall Outside Null 360 342 400965 
Device Type 1 Wall Outside Null 360 342 401034 
Device Type 1 Wall Outside Null 360 342 401303 
Device Type 3 Standard Standard Null 180 171 401471 
Device Type 1 Wall Outside Null 360 342 401596 
Device Type 3 Standard Standard Null 180 171 401753 
Device Type 3 Standard Standard Null 180 171 401866 
Device Type 1 Wall Outside Null 360 342 402189 
Device Type 3 Standard Standard Null 180 171 402537 
Device Type 1 Wall Outside Null 360 342 402685 
Device Type 1 Wall Outside Null 360 342 402930 
Device Type 1 Wall Outside Null 360 342 402952 
Device Type 3 Standard Standard Null 180 171 403164 
Device Type 1 Wall Outside Null 360 342 403234 
Device Type 3 Standard Standard Null 180 171 403303 
Device Type 1 Wall Outside Null 360 342 403473 
Fixture Type 4 Standard Null F1 140 137 406101 
Fixture Type 4 Step Null F1 140 137 406102 
Fixture Type 4 Step Null F1 140 137 406103 
Fixture Type 4 Step Null F1 140 137 406104 
Fixture Type 4 Step Null F1 140 137 406105 
Fixture Type 4 Step Null F1 140 137 406106 
Fixture Type 4 Step Null F1 140 137 406124 
Fixture Type 4 Step Null F1 140 137 406125 
Fixture Type 4 Step Null F1 140 137 406126 
Fixture Type 4 Step Null F1 140 137 406127 
Fixture Type 4 Step Null F1 140 137 406128 
Fixture Type 4 Step Null F1 140 137 406129 
+0

你不能只是要求人们为你做这项工作。你到目前为止尝试过哪些方法不适合你?你有没有在你尝试过的地方寻找解决方案? –

+0

我明白你的意思了。好点子。我似乎无法发布任何编码的样本,我一直在这里搜索几天。 –

+0

这是一个常见的谷歌搜索,我回来的所有结果都没有提供任何解决方案,似乎适合我的情况。 “阅读和排序一个csv c#” –

如上所述 - 你不能指望人们为你做这件事...但我很无聊。

下面是一个完整的控制台应用程序形式的简单解决方案,可能会分崩离析第二次给它真实世界的数据,但希望能让你开始。

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApp1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
     //Read file 
     var fileContents = File.ReadAllText("file.txt"); 

     //split on carriage returns and line feeds, remove empty entries. 
     var lines = fileContents.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); 

     //Split each line on Tab 
     var splitLines = lines.Select(l => l.Split(new[] { '\t' }, StringSplitOptions.RemoveEmptyEntries)); 

     //splitLines is now an array of arrays. Each splitLine entry is a line, and each entry of each splitline element is 
     //a single field... so we should be able to sort how we want, e.g. by first field then by second field: 
     var sortedLines = splitLines.OrderBy(sl => sl[0]).ThenBy(sl => sl[1]); 

     //put back together as TSV - put tabs back. 
     var linesWithTabsAgain = sortedLines.Select(sl => string.Join("\t", sl)); 

     //put carriage returns/linefeeds back 
     var linesWithCRLF = string.Join("\r\n", linesWithTabsAgain); 

     File.WriteAllText("newFile.txt",linesWithCRLF); 


    } 
} 
} 
+0

:)你让我的日子。非常感谢你的提交。很棒。我已经研究了近一个星期,但从未发现任何东西。 –

+0

我希望有人发现它和我一样有用。 –

+0

不客气。而不是对数据进行排序,而是将其转换为可排序的数据,对其进行排序然后再将其转换回来。很明显,如果源数据是巨大的,因为它将整个内容加载到内存中,这种方法并不会很好......如果您有内存问题,最好将它加载到数据库中进行排序......但它是一个周五下午有趣的小锻炼:) – GPW