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