【问题标题】:Efficient way to count Columns计算列的有效方法
【发布时间】:2015-01-22 21:27:08
【问题描述】:

我需要一些有效的方法来计算 .txt 文件中的列数。我的文件格式:

123.222  333.333  454.45  453.333
14.222  3.333  434.45  423.333
33.2  223.333  434.45  153.333

所以我尝试了这个:

StreamReader sr = new StreamReader(_path);
int ColumnsCount = Array.ConvertAll(sr.ReadLine().Split('  '), Double.Parse).Count();

第一行足以获取此文本格式的列数。

【问题讨论】:

    标签: c# count text-files multiple-columns


    【解决方案1】:

    几乎快到了。如果您需要转换,只需执行以下操作:

    int ColumnsCount = Array.ConvertAll(sr.ReadLine().Split(' '), Double.Parse).Length;
    

    使用Length 而不是Count 可以为您节省集合的枚举。如果您不需要转换,只需:

    sr.ReadLine().Split(' ').Length;
    

    否则,您仍然需要始终进行读取,并且始终保持Split 行。既然没有办法,那就尽快吧。

    【讨论】:

    • 测试一下!它是不可编译的。将' '(三个空格)更改为' '(一个空格)或" "(三个空格)。
    • @QualityCatalyst 我刚刚复制了他那部分的代码。不过很好,我已经修好了。
    • 实际上它不是三个空格它的“制表符分隔符”只要我不能在这里使用它我只使用三个空格,无论如何这不是问题点——三个或四个空格或任何其他分隔符都不会很重要...
    【解决方案2】:

    您可以避免使用double.Parse,因为您只对列数感兴趣并使用带有删除空条目选项的Split。您也可以使用 File.ReadLine 并阅读第一行,例如:

    string firstLine = File.ReadLines("filePath").First();
    int ColumnsCount = 0;
    if (firstLine != null)
    {
        ColumnsCount = firstLine.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries).Length;
    }
    

    我不确定这会快多少,即使会有差异,我相信它可以忽略不计。

    【讨论】:

      【解决方案3】:

      这是一个快速的答案。无需进行字符串拆分,只需将字符串视为字符数组,计算空格即可。这也假设您不能有一个 0 列的表。

      var columnCount = 1;
      foreach(var c in File.ReadLines("filePath").First() ?? String.Empty)
      {
         if (c == ' ')
         {
            columnCount++;
         }
      }
      
      return columnCount;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-12
        • 1970-01-01
        • 2021-02-15
        • 2011-03-11
        相关资源
        最近更新 更多