如何在.net中按顺序处理文本文件时检查另一列值

本文关键字:检查 一列 文件 net 文本 顺序处理 | 更新日期: 2023-09-27 18:20:04

我正在阅读一个文本文件,其中包含10万个条目,很少有问题发布。我必须只读取那些活动的"Y"记录,其余的都是我必须跳过的,如果ASC的列值是ASC10ASC20,那么我必须将名为"sss"的字符串变量值设置为"Flori",如果ASC30,那么我就必须检查另一个名为"SAC"的列,如果它的值是3,那么sss="Texi",否则如果它是4,那么sss="Flori)。

以下代码将读取文本文件并进行处理,但这两个要求我无法实现,因为值在同一行,并且按顺序检索值

我写的代码是:

private static void Readfiles()
{
    string path = @"D:'study'Students.txt";
    string sss = string.Empty;
    System.Collections.ArrayList ar = new System.Collections.ArrayList();
    string[] lines = File.ReadAllLines(path).Where(arg => !string.IsNullOrWhiteSpace(arg)).ToArray();
    string[] cols = lines[0]
        .Trim()
        .Split(new[] { ''t', ' ' }, StringSplitOptions.RemoveEmptyEntries);
    int liness = 1;
    foreach (string line in lines.Skip(1))
    {
        string[] cells = line
            .Trim()
            .Split(new[] { ''t' }, StringSplitOptions.RemoveEmptyEntries);
        for (int counter = 0; counter < cols.Length; counter++)
        {
            string cellValue = "N/A";
            if (counter < cells.Length)
                cellValue = cells[counter];
            Console.WriteLine("{0}  {1}", cols[counter],cellValue);
            if (cols[counter] == "ASC")
            {
                if (cellValue == "ASC10" || cellValue == "ASC20")
                {
                    sss = "Flori";
                }
                //Here i have to check other column named "SAC" but HOWWWWWWWWWWWWWW??????????????????????????????????/ because processing is sequential
                if (cellValue == "ASC30")
                {
                    sss = "Texi";
                }
            }
        }
        liness++;
    }
}

文本文件格式为

Firstname   lastname    ASC age salary  location    active  SAC
Tom jerry   ASC10   32  20000   NY  Y   3
Sam peter   ASC20   31  30000   KY  N   4
jason   sam ASC30   21  40000   JU  Y   3
jerry   Forman  ASC20   34  23456   KK  Y   4

如何在.net中按顺序处理文本文件时检查另一列值

要跳过非活动行,请获取"活动"列的索引,并在foreach循环开始时检查该值:

int indexActive = Array.indexOf(cols, "active");
if (indexActive >= 0 && indexActive < cells.Count() && cells[indexActive] == "N")
{
    continue; // this skips this round of the foreach loop and continues with the next one
}

获取SAC列的索引,并检查当前行中具有该索引的单元格,如下所示(插入注释处):

int indexSAC = Array.indexOf(cols, "SAC");
if (indexSAC >= 0 && indexSAC < cells.Count())
{
    if (cells[indexSAC] == "3")
    {
        sss = "Texi";
    }
    else if (cells[indexSAC] == "4")
    {
        sss = "Flori";
    }
}

第一行也可以在定义cols数组后插入,这样只需执行一次。