【问题标题】:Read specific column in text file using C#使用 C# 读取文本文件中的特定列
【发布时间】:2018-12-04 20:20:00
【问题描述】:

我有一个基于列的 txt 文件。如何以编程方式阅读任何特定列?

到目前为止,我想出了这个解决方案,它读取指定的列索引,例如:firstValue[0] 将读取文本文件中的所有 (1)。

如果我这样写,那么我可以很好地阅读前三个索引,但必须有一种更简洁的方法。

Console.WriteLine(string.Join("", firstValue[0], firstValue1, firstValue[2], firstValue[3]));

如果有一种方法可以让我计算文本文件中的列而不是选择我想要读取的列的索引;那将是理想的。

我想阅读: 121 122 123 124

我在网上搜索过类似的问题,但他们并没有我想要的。

        string[] lines = File.ReadAllLines(YourFile);
        foreach (var line in lines)
        {
            var firstValue = line.Split(new string[] { "        " }, StringSplitOptions.RemoveEmptyEntries)[0];                
            Console.WriteLine(firstValue[0]);
            //Console.WriteLine(string.Join("", firstValue[0], firstValue[1], firstValue[2], firstValue[3]));
        }


        Console.ReadKey();

【问题讨论】:

  • 当您的列具有固定长度时,您可以将位置指针设置为列的开头。或者您可以将字符串解析为数组并仅使用一个元素。
  • 感谢您的建议,我将研究如何做到这一点@Findus
  • 如果空格字符是您的分隔符,请使用它,不要重复它。 "123 456 789 1111".Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries) => string[4] { "123", "456", "789", "1111" }
  • 你在我的评论中看不到,但是列之间有多个空格...:“123_456____789_______________111”
  • 明白了,这是有道理的。谢谢@BurnsBA

标签: c#


【解决方案1】:

你可以试试这个:

public static List<string> GetColumnValues(string[] lines, int columnNumber)
{
    var result = new List<string>();
    Regex regex = new Regex("[ ]{2,}", RegexOptions.None);
    foreach (var line in lines)
    {
        var cleanedLine = regex.Replace(line, " ");
        var columns = line.Split(" ", StringSplitOptions.RemoveEmptyEntries);
        result.Add(columns[columnNumber-1]);
    }
    return result;
}

应该添加额外的检查,但你可以得到一个想法。

【讨论】:

    【解决方案2】:

    问题是,像这样拆分它:

    var firstValue = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
    

    firstValue 将等于 foreach 循环中类似 121 20412 010 的串联字符串


    然后我尝试了另一种方法:

    var firstValue = line.Split(new string[] { "\t" }, StringSplitOptions.RemoveEmptyEntries);
    

    哪些列索引,所以我可以选择我希望数据来自哪个列。

            foreach (var line in lines)
            {
                var firstValue = line.Split(new string[] { "\t" }, StringSplitOptions.RemoveEmptyEntries);
                Console.WriteLine(firstValue[2]);                
            }
    

    输出:

    010

    020

    030

    040

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多