2016-04-05 4 views
1

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

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; 
    } 
+0

В дополнение к ответам Habibs вы можете проверить [TextFieldParser] (https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser%28v=vs.110%29.aspx) для чтения и расщепления. – Filburt

ответ

2

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

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

Смежные вопросы