代码之家  ›  专栏  ›  技术社区  ›  taji01

使用C读取文本文件中的特定列#

c#
  •  0
  • taji01  · 技术社区  · 6 年前

    如果我这样写的话,我就能很好地阅读前三个索引,但是必须有一个更干净的方法。

    1 ,firstValue[2],firstValue[3]);

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

    121 122 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();
    

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  0
  •   Belurd    6 年前

    你可以试试这个:

    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
  •  0
  •   Community Neeleshkumar S    4 年前

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

    firstValue 将等于一个类似这样的串联字符串 121 20412 010 在foreach循环中

    enter image description here


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

    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