Introduction
This code allows you to take data stored in a text file and populate a DataSet
with it. It contains one static
function that:
- Opens the file
- Makes a
DataSet
with a DataTable
of the given name - Populates the
DataTable
with the correct columns (pulled from the first line of the text file) - Populates the
DataTable
with data and returns the DataSet
Background
Anyone who works in business knows that while the delimited text file is the lowest common denominator of data transfers, the process of handling that data can be a pain. This class is an attempt to make handling these files as easy as possible.
Using the Code
Using this code is simple. Include it in your project and call it like this:
DataSet ds = TextToDataSet.Convert(
"c:\test.txt", "MyNewTable", "\t");
It is necessary to give the full path to the file, so if you use this class in an ASP.NET application, the code may look something like this:
DataSet ds = TextToDataSet.Convert(
Server.MapPath("test.txt"), "MyNewTable", "\t");
The last parameter is the delimiter
parameter. This is what separates each column from the next. In the case shown, we pass it the escape sequence for a horizontal tab, but you can pass any string
such as a space (" ") or a semi-colon(;). You may find this list helpful:
Escape Sequences for Formatting
Escape Sequence | Purpose |
\a | bell (alert) |
\b | backspace |
\f | form feed |
\n | new line |
\r | carriage return |
\t | horizontal tab |
\v | vertical tab |
\' | single quotation mark |
\" | double quotation mark |
\\ | backslash |
\? | literal question mark |
\ooo | ASCII character shown in octal notation |
\xhh | ASCII character shown in hexadecimal notation |
\xhhhh | -UNICODE character shown in hexadecimal notation when this escape sequence is used in a wide-character constant or a UNICODE string literal |
There are many more, but these are the most common.
I guess now all that is left is to give you the code, so here it is:
using System;
using System.Data;
using System.IO;
namespace TestTextToDataSet
{
public class TextToDataSet
{
public TextToDataSet()
{ }
public static DataSet Convert(string File,
string TableName, string delimiter)
{
DataSet result = new DataSet();
StreamReader s = new StreamReader(File);
string[] columns = s.ReadLine().Split(delimiter.ToCharArray());
result.Tables.Add(TableName);
foreach(string col in columns)
{
bool added = false;
string next = "";
int i = 0;
while(!added)
{
string columnname = col + next;
columnname = columnname.Replace("#","");
columnname = columnname.Replace("'","");
columnname = columnname.Replace("&","");
if(!result.Tables[TableName].Columns.Contains(columnname))
{
result.Tables[TableName].Columns.Add(columnname);
added = true;
}
else
{
i++;
next = "_" + i.ToString();
}
}
}
string AllData = s.ReadToEnd();
string[] rows = AllData.Split("\r\n".ToCharArray());
foreach(string r in rows)
{
string[] items = r.Split(delimiter.ToCharArray());
result.Tables[TableName].Rows.Add(items);
}
return result;
}
}
}
Points of Interest
You can overload this function many different ways to fit your project's needs. This is just one way that I do it. If there is a desire for more options, I will post some of them. Enjoy the code!
History
- 19th April, 2004: Initial version
License
This article has no explicit license attached to it, but may contain usage terms in the article text or the download files themselves. If in doubt, please contact the author via the discussion board below. A list of licenses authors might use can be found here.