Page 1 of 1

Defining Comment Character in CSV File

Posted: Thu Mar 11, 2010 4:57 pm
by costamesakid
This is more of a C# question but Im going to post it on the Ranorex forum as well.

I have a test that reads in records from a CSV file to populate a form. The CSV file is exceedingly long so I was hoping to use comments to section it out. The problem is that there is no comment character standard for a CSV file, but I did hear that you can define your own comment character in the C# file that reads the CSV file. For instance "skip rows that start with '#'".

The C# file that I am actually using to read the CSV file is CSVConnector.cs which is packaged with Ranorex in the Data Driven sample. Is it possible to define a comment character in this file, and if so can I possibly get an example of the code?

Possibly this is something Ranorex can incorporate in there CSVConnector.cs file in future releases? Thanks

Re: Defining Comment Character in CSV File

Posted: Thu Mar 11, 2010 7:23 pm
by Ciege
I've not looked at the CSVConnector.cs file but you could do your own code very easily...
Somethign like this.

Code: Select all

string strFile1 = "myfile.txt";
using (StreamReader li = new StreamReader(strFile1))
{
 while (true)
  {
  if (li.EndOfStream)
  break;
  string liTxt = li.ReadLine();
  if (liTxt.StartsWith("#")
   {
      //skip line
   }
   else
   {
     //continue doing what you need
   }
  }
}

Re: Defining Comment Character in CSV File

Posted: Wed Mar 31, 2010 8:45 am
by costamesakid
Thanks Ciege.

I tried a few variations of this code but could not get it to work. Its a minor syntax error for sure so I pawned it off to one of our developers.

Re: Defining Comment Character in CSV File

Posted: Wed Mar 31, 2010 3:55 pm
by Ciege
What error (if any) are you getting? Is it a compile error or a runtime error? Please add some more information so I can help out.
It wasn’t a direct copy/paste from my code base since I had to remove a bit of information before I was able to post the code so I may have fat-fingered something.

Re: Defining Comment Character in CSV File

Posted: Wed Apr 28, 2010 3:53 am
by costamesakid
Well... I have been assigned to re-investigate this issue and non of my attempts to implement Ciege's code are working. For starters, I have no idea where to implement Ciege's code within the current CSV Connector file. I also cannot find the C# syntax to skip a line that begins with a certain character. I have pasted the Ranorex CSV Connector code below. If I could get a little more direction with this issue it would be greatly appreciated. It just seems like this should be a much easier then I am making it out to be. I really would have figured if the '.Split' method defines the column character then there certainly should be a method to define the comment character?

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;


/// <summary>
/// Represents a data connector to a CSV-file
/// </summary>
class CSVConnector
{
private string fileName = null;
private DataTable dt = null;

/// <summary>
/// Initializes a new instance of the <see cref="CSVConnector"/> class.
/// </summary>
/// <param name="fileName">The path to the CSV file <see cref="CSVConnector"/></param>
public CSVConnector(String fileName)
{
try
{
if (fileName == null)
return;

this.fileName = fileName;
dt = new DataTable();
ParseCSVData();
}
catch (Exception e)
{
Console.WriteLine("{0} Open Connector Error: ", e.ToString());
}
}

/// <summary>
/// Gets the Data Collection Rows
/// </summary>
public DataRowCollection Rows
{
get { return dt.Rows; }
}

/// <summary>
/// Gets the Data Columns
/// </summary>
public DataColumnCollection Header
{
get { return dt.Columns; }
}

private void ParseCSVData()
{
try
{
String[] csvData = System.IO.File.ReadAllLines(fileName);

if (csvData.Length == 0)
return;

String[] headings = csvData[0].Split(';');

foreach (string header in headings)
{
dt.Columns.Add(header, typeof(string));
}

for (int j = 1; j < csvData.Length; j++)
{
DataRow row = dt.NewRow();

for (int i = 0; i < headings.Length; i++)
{
row = csvData[j].Split(';');
}

//if (csvData[j].StartsWith['#'])

dt.Rows.Add(row);
}
}
catch (Exception e)
{
Console.WriteLine("{0} Parse CSV Data Error: ", e.ToString());
}
}
}

Re: Defining Comment Character in CSV File

Posted: Thu Apr 29, 2010 4:07 pm
by Support Team
Hi!

IMHO, it would be more usefull to place the if statement inside the for loop.
for (int j = 1; j < csvData.Length; j++)
{
    DataRow row = dt.NewRow();

    //If row does not start with "#" go into the if statement and execute code inside.
    if(!csvData[j].StartsWith("#")) 
    {
        for (int i = 0; i < headings.Length; i++)
        {
            row = csvData[j].Split(';');
        }
        dt.Rows.Add(row);
    }
}


Regards,
Peter
Ranorex Support Team

Re: Defining Comment Character in CSV File

Posted: Fri Apr 30, 2010 5:13 pm
by costamesakid
Thanks Peter

This works perfect for what I need the code to do.