您的位置:首页 > 其它

读取CSV文件数据,得到DataSet

2012-02-06 16:45 537 查看
private bool ReadCsvDataSetEx(string i_fileName, out DataSet o_ds)

{

o_ds = new DataSet();

DataTable dt = new DataTable();

o_ds.Tables.Add(dt);

if (i_fileName == "")

return false;

try

{

string text = File.ReadAllText(i_fileName, Encoding.GetEncoding(932));

if (text == null)

{

return false;

}

List<string[]> text_array = new List<string[]>();

List<string> line = new List<string>();

StringBuilder field = new StringBuilder();

bool in_quata = false;

bool field_start = true;

for (int i = 0; i < text.Length; i++)

{

char ch = text[i];

if (in_quata)

{

if (ch == '\"')

{

if (i < text.Length - 1 && text[i + 1] == '\"')

{

field.Append('\"');

i++;

}

else

in_quata = false;

}

else

{

field.Append(ch);

}

}

else

{

switch (ch)

{

case ',':

line.Add(field.ToString());

field.Remove(0, field.Length);

field_start = true;

break;

case '\"':

if (field_start)

in_quata = true;

else

field.Append(ch);

break;

case '\r':

if (field.Length > 0 || field_start)

{

line.Add(field.ToString());

field.Remove(0, field.Length);

}

text_array.Add(line.ToArray());

line.Clear();

field_start = true;

if (i < text.Length - 1 && text[i + 1] == '\n')

i++;

break;

default:

field_start = false;

field.Append(ch);

break;

}

}

}

if (field.Length > 0 || field_start)

{

line.Add(field.ToString());

}

if (line.Count > 0)

{

text_array.Add(line.ToArray());

}

for (int j = 0; j < text_array[0].Length; j++)

{

DataColumn column = new DataColumn();

column.ColumnName = "C_" + DataUtil.CStr(j);

dt.Columns.Add(column);

}

for (int i = 0; i < text_array.Count; i++)

{

DataRow dr = dt.NewRow();

for (int j = 0; j < text_array[i].Length; j++)

{

dr[j] = text_array[i][j];

}

dt.Rows.Add(dr);

}

return true;

}

catch

{

return false;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: