Не читать пустые или нулевые записи в виде данных из текстового файла - C#

У меня есть function который читает все tab delimited записи из текстового файла в datatble, но у меня есть много пустых или нулевых столбцов, которые tab delimited, Я просто хочу прочитать все записи, где столбец 3 не является нулевым или не пустым. как мне это сделать? Вот мой простой метод

public DataTable ConvertTextToDataTable(string filePath, int numberOfColumns)
    {
        DataTable tbl = new DataTable();

        for (int col = 0; col < numberOfColumns; col++)
            tbl.Columns.Add(new DataColumn("Column" + (col + 1).ToString()));


        string[] lines = System.IO.File.ReadAllLines(filePath);
        int i = 0;
        foreach (string line in lines)
        {
            var cols = line.Split('\t');

            DataRow dr = tbl.NewRow();
            for (int cIndex = 0; cIndex < numberOfColumns; cIndex++)
            {
                dr[cIndex] = cols[cIndex];
            }

            tbl.Rows.Add(dr);
            i++;
        }
        return tbl;
    }

1 ответ

Решение

Простейшим было бы вставить чек для IsNullOrWhiteSpace для столбца 3 перед созданием и добавлением значений в таблицу данных, например:

public DataTable ConvertTextToDataTable(string filePath, int numberOfColumns)
{
    DataTable tbl = new DataTable();

    for (int col = 0; col < numberOfColumns; col++)
        tbl.Columns.Add(new DataColumn("Column" + (col + 1).ToString()));


    var lines = System.IO.File.ReadLines(filePath);
    int i = 0;
    foreach (string line in lines)
    {
        var cols = line.Split('\t');

        if (cols.Length > 3 && String.IsNullOrWhiteSpace(cols[3]))
        {
            continue; //Ignore this line 

        }
        DataRow dr = tbl.NewRow();
        for (int cIndex = 0; cIndex < numberOfColumns; cIndex++)
        {
            dr[cIndex] = cols[cIndex];
        }

        tbl.Rows.Add(dr);
        i++;
    }
    return tbl;
}

Также обратите внимание на использование var lines = System.IO.File.ReadLines(filePath); вместо File.ReadAllLines, поскольку он будет оценивать файл построчно, а не загружать все содержимое файла в память.

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