Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 显示所有列时需要帮助,缺少数据_C#_Visual Studio 2008_Console_Tsv - Fatal编程技术网

C# 显示所有列时需要帮助,缺少数据

C# 显示所有列时需要帮助,缺少数据,c#,visual-studio-2008,console,tsv,C#,Visual Studio 2008,Console,Tsv,我试图通过c中的第三列对txt文件进行排序。我可以在我的列下面看到4行,但是文本文件包含更多的行。我还需要多做一项功能,那就是从显示器上删除重复数据。{如果第一列和第二列中的数据与另一行相同,则从显示中删除一个实例。数据区分大小写,即broc与broc不同}。谢谢你的帮助。我的代码如下。请注意,txt文件是TSV而不是CSV using System; using System.Collections.Generic; using System.Linq; using System.T

我试图通过c中的第三列对txt文件进行排序。我可以在我的列下面看到4行,但是文本文件包含更多的行。我还需要多做一项功能,那就是从显示器上删除重复数据。{如果第一列和第二列中的数据与另一行相同,则从显示中删除一个实例。数据区分大小写,即broc与broc不同}。谢谢你的帮助。我的代码如下。请注意,txt文件是TSV而不是CSV

     using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;
namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            var records = (from l in File.ReadAllLines(@"d:\data\542112107\Desktop\project 1\Project1\Project1\bin\Debug\instance_test.txt")
                           let pieces = l.Split('\t')
                           select new { Col1 = pieces[0], Col2 = pieces[1], Col3 = pieces[2], Col4 = pieces[3] })



                .Skip(1)


                .Distinct()
                .OrderBy(c => c.Col3);

            for (int i = 0; i < 99; i++)
            {

            } foreach (var r in records)
            { Console.WriteLine("{0}, {1}, {2},{3}", r.Col1, r.Col2, r.Col3, r.Col4); }

            Console.WriteLine();
            Console.WriteLine("Done");
            Console.ReadLine();
        }
    }
}
以下是示例输入:\n是新行

Heading 1 Heading 2 Heading3 Heading 4 ascvad3124 adfdasfData asasffasf adsfasfasdf asf123134Data dasfasdfdasfData Dasfasfata asdfasdfadsf 123123fData asdfdasfsData asdfasdfasdf sadvsdfdaf
因此,第一个问题是,您没有根据第三列的值进行排序;您在第三列值的第二个字母上排序。将c.Col3[1]更改为c.Col3,以便在第三列上实际订购

另一个问题是,您正在根据所有字段的串联进行分组;这不是特别安全。这里ab,c,d,e将被认为等于a,bc,d,e。您可以直接调用Distinct而不是GroupBy。匿名对象正确地重写了一个基于底层属性而不是引用的GetHashCode,所以这样就可以了


接下来,您可以使用ReadLines而不是ReadAllLines来惰性地读取行,而不是在您只打算惰性地处理数据时急切地加载所有行。

您能否提供一个仅包含几行的示例输入以及使用该输入运行代码的输出,带着对错误原因的解释?编辑了输入问题。输出在这里:标题1标题2标题3标题4\n asd asf asdfas asdf\n asd asf asdfas asdf\n asd asf asdfas asdf\n代码有c.Col3[1]的原因是它也对列标题进行排序。这样,排序过程从第二列开始,标题列保持不变。你能给我一个你想做什么的示例代码吗。我现在是个笨蛋。不会那样呆太久的;我将在代码中使用ReadLines。感谢兄弟的投入@用户1063280,但您没有获得第二行。正如我所说,你得到的是字符串的第二个字符,这显然不是你想要的。要处理标题行,您可能只需跳过它,使用Skip1,然后在需要时将标题添加回。@user1063280我已经准确地告诉了您需要更改的内容。添加所有不会更改的代码只是浪费空间。如果添加distinct,则会出现一个错误,说明无法将lambda表达式转换为类型。我验证了你的理论,它是从第二个字符排序的,但不是根据我的输出。