Как проверить значение другого столбца при последовательной обработке текстового файла в.net

Я читаю текстовый файл, который содержит 100 000 записей, и некоторые из них опубликованы под вопросом. Я должен читать только те записи, которые активны 'Y', все остальное, что я должен пропустить, и если значение столбца для ASC является ASC10 или же ASC20 Затем я должен установить строковую переменную с именем '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

1 ответ

Решение

Чтобы пропустить неактивные строки, получите индекс "активного" столбца и проверьте это значение в начале цикла 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 массив, так что вы делаете это только один раз.

Другие вопросы по тегам