using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Data;
///
/// Summary description for CSVTools
///
namespace Tools
{
public class CSVTools
{
public CSVTools()
{
//
// TODO: Add constructor logic here
//
}
static void ExportTableToCsvFile(DataTable table, bool printHeaders, String fileName)
{
StringBuilder sb = new StringBuilder();
StreamWriter CSVFile = new StreamWriter(fileName);
if (printHeaders)
{
//write the headers.
for (int colCount = 0;
colCount < table.Columns.Count; colCount++)
{
sb.Append(table.Columns[colCount].ColumnName);
if (colCount != table.Columns.Count - 1)
{
sb.Append(",");
}
else
{
sb.AppendLine();
}
}
}
// Write all the rows.
for (int rowCount = 0;
rowCount < table.Rows.Count; rowCount++)
{
for (int colCount = 0;
colCount < table.Columns.Count; colCount++)
{
sb.Append(table.Rows[rowCount][colCount]);
if (colCount != table.Columns.Count - 1)
{
sb.Append(",");
}
}
if (rowCount != table.Rows.Count - 1)
{
sb.AppendLine();
}
}
CSVFile.Write(sb.ToString());
CSVFile.Close();
//return sb.ToString();
}
public static DataTable csvToDataTable(string file, bool isRowOneHeader)
{
DataTable csvDataTable = new DataTable();
//no try/catch - add these in yourselfs or let exception happen
String[] csvData = File.ReadAllLines(HttpContext.Current.Server.MapPath(file));
//if no data in file ‘manually’ throw an exception
if (csvData.Length == 0)
{
throw new Exception("CSV File Appears to be Empty");
}
String[] headings = csvData[0].Split(',');
int index = 0; //will be zero or one depending on isRowOneHeader
if (isRowOneHeader) //if first record lists headers
{
index = 1; //so we won’t take headings as data
//for each heading
for (int i = 0; i < headings.Length; i++)
{
//replace spaces with underscores for column names
headings[i] = headings[i].Replace(" ", "_");
//add a column for each heading
csvDataTable.Columns.Add(headings[i], typeof(string));
}
}
else //if no headers just go for col1, col2 etc.
{
for (int i = 0; i < headings.Length; i++)
{
//create arbitary column names
csvDataTable.Columns.Add("col" + (i + 1).ToString(), typeof(string));
}
}
//populate the DataTable
for (int i = index; i < csvData.Length; i++)
{
//create new rows
DataRow row = csvDataTable.NewRow();
for (int j = 0; j < headings.Length; j++)
{
//fill them
row[j] = csvData[i].Split(',')[j];
}
//add rows to over DataTable
csvDataTable.Rows.Add(row);
}
//return the CSV DataTable
return csvDataTable;
}
}
}
No comments:
Post a Comment