Rui Ruivo

Rui Ruivo

  • 1.3k
  • 132
  • 35.8k

Convert CSV to datatable

May 9 2019 2:32 AM

Hello

I am trying to convert manually a CSV file into a datatable for posterior analysis and filtering.

The company was doing it manually in Excel but I’d figure it can be done programmatically and increase productivity.

I did try do use some existing classes and nuggets without success (Errors I can’t fix or don’t understand).

Could someone please look at my code and help me figure how to convert manually a CSV with '|' as divider between cells to datatable and apply filtering please. Or Just point me in the right direction.
 
I am trying this: https://www.c-sharpcorner.com/forums/c-sharp-importing-csv-files-into-datatables 
 
I like to figure things by myself but this is taking me forever.
 
Best regards
Rui 
  1. private void ConvertCSVtoDataTable(string filePath)    
  2.      {    
  3.         LogMessage("(<-o->)");    
  4.     
  5.         // Counts lines in file    
  6.         long lineCount = 0;    
  7.         int columnsCount = 0;    
  8.         char divider = '|';    
  9.     
  10.         // FIRST LINE - Read first Line for Columns Count    
  11.         string firstLine = File.ReadLines(filePath).First();    
  12.     
  13.         // FIRST LINE - COUNT columns for DataTable using DIVIDER = "|" from First Line    
  14.         foreach (char c in firstLine) if (c == divider) columnsCount++;    
  15.     
  16.     
  17.         // CREATE DATATABLE    
  18.         DataTable dt = new DataTable();    
  19.         dt.Clear();    
  20.         dt.Columns.Add("a"); // Colonne 0    
  21.         dt.Columns.Add("b"); // Colonne 0    
  22.         dt.Columns.Add("c"); // Colonne 0    
  23.         dt.Columns.Add("d"); // Colonne 0    
  24.         dt.Columns.Add("e"); // Colonne 0    
  25.         dt.Columns.Add("f"); // Colonne 0    
  26.         dt.Columns.Add("g"); // Colonne 0    
  27.         dt.Columns.Add("h"); // Colonne 0    
  28.         dt.Columns.Add("i"); // Colonne 0    
  29.         dt.Columns.Add("j"); // Colonne 0    
  30.         dt.Columns.Add("k"); // Colonne 0    
  31.         dt.Columns.Add("l"); // Colonne 0    
  32.         dt.Columns.Add("m"); // Colonne 0    
  33.         dt.Columns.Add("n"); // Colonne 0    
  34.         dt.Columns.Add("o"); // Colonne 0    
  35.         dt.Columns.Add("p"); // Colonne 0    
  36.         dt.Columns.Add("q"); // Colonne 0    
  37.         dt.Columns.Add("r"); // Colonne 0    
  38.         dt.Columns.Add("s"); // Colonne 0    
  39.         dt.Columns.Add("t"); // Colonne 0    
  40.         dt.Columns.Add("u"); // Colonne 0    
  41.         dt.Columns.Add("v"); // Colonne 0    
  42.         dt.Columns.Add("w"); // Colonne 0    
  43.         dt.Columns.Add("x"); // Colonne 0    
  44.         dt.Columns.Add("y"); // Colonne 0    
  45.         dt.Columns.Add("z"); // Colonne 0    
  46.     
  47.     
  48.         // READ LINE BY LINE    
  49.         using (StreamReader r = new StreamReader(filePath))    
  50.         {    
  51.            string line;    
  52.     
  53.            // Reads line by line from the file    
  54.            while ((line = r.ReadLine()) != null)    
  55.            {    
  56.     
  57.               while (line.IndexOf(divider) != -1) // -1 is returned if not found    
  58.               {    
  59.     
  60.                  // START DIVIDING IN BLOCKS FOR DATATABLE    
  61.                  // Get divider position    
  62.                  int endBlock = line.IndexOf(divider);    
  63.     
  64.                  // Get first Block of text    
  65.                  String firstBlock = line.Substring(0, endBlock);    
  66.                  LogMessage("Line: " + lineCount + " - Block: " + firstBlock);  
  67.                  // Deletes first text block    
  68.                  line = line.Remove(0, firstBlock.Length + 1);    
  69.   
  70.                  // MOVE TO NEXT CELL/BLOCK UNTIL END OF LINE  
  71.   
  72.                  // REPEAT IN EVERY LINE  
  73.     
  74.                  lineCount++;    
  75.               }
  76.            }    
  77.         }    
  78.     
  79.      } 

Answers (8)