读取文本文件,然后将行分解为列

时间:2012-07-24 03:21:26

标签: c# asp.net .net

我有一个任务,我需要读取一个文本文件,然后将每一行细分为列,然后我需要将其插入数据库。

最好的方法是什么?任何帮助都将是欣赏它,如果你能提供代码将更好。

这是我到目前为止所拥有的

    string filename = Server.MapPath("~/Text_File_4.txt");

    StreamReader sr = new StreamReader(filename);

    string styl;
    string colr;
    string sdim;
    string size;
    string qty;
    string line;

    string sprice;
    string sretail;

    while ((line = sr.ReadLine()) != null)

    {
        styl = line.Substring(0, 6);
        colr = line.Substring(6, 2);
        sdim = line.Substring(8, 1);
        size = line.Substring(14, 3);
        qty = line.Substring(19, 5);


        sprice = line.Substring(27, 6);
        sretail = line.Substring(38, 4);

        con.Open();
        cmd = new SqlCommand("insert into ststyl00(ststyl, stcolr, stsdim, stszcd, stprq, strprq) values(@ststyl, @stcolr, @stsdim, @stszcd, @stprq, @strprq)", con);

        cmd.Parameters.Add("@ststyl", SqlDbType.VarChar, 15).Value = styl;
        cmd.Parameters.Add("@stcolr", SqlDbType.VarChar, 3).Value = colr;
        cmd.Parameters.Add("@stsdim", SqlDbType.VarChar, 8).Value = sdim;
        cmd.Parameters.Add("@stszcd", SqlDbType.VarChar, 3).Value = size;

        cmd.Parameters.Add("@stprq", SqlDbType.VarChar, 8).Value = sprice;
        cmd.Parameters.Add("@strprq", SqlDbType.VarChar, 8).Value = sretail;
        cmd.ExecuteNonQuery();
        con.Close();



    }

3 个答案:

答案 0 :(得分:3)

输入为CSV

如果您的输入文件是CSV文件,我强烈建议您使用

中提供的CSV Reader类

http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader

输入是固定宽度

如果您的输入是固定宽度的,只需读取所有行并将每一行解析成适当的结构以存储在数据库中(稍后会详细介绍)。

如果您只需要阅读一些文本(可能只有几兆字节或更少),请使用

File.ReadAllLines

http://msdn.microsoft.com/en-us/library/s2tte0y1

将文件的所有行读入 string []

写入数据库

您现在可以读入文件。现在,您需要将其写入数据库。据推测,有一个DB表,其中给定的模式与文件中的数据相匹配。查看ADO.Net以了解如何写入数据库并根据需要提出具体问题。

http://msdn.microsoft.com/en-us/library/h43ks021(v=vs.100).aspx

答案 1 :(得分:0)

这听起来像你必须有带分隔符的文本文件。用于将数据分隔为列的分隔符,例如

data1,data2,data3,data4

分隔符可以是逗号或任何其他未出现在常规数据中的字符。如果你有这种格式的文本文件,那么很容易解析它并将其推送到数据库。

方法可能是 - 您使用StreamReader打开文件。逐行读取文件,即一次读取一行。通过指定分隔符将行拆分为列。

string[] lineData = sr.ReadLine().split('delimiter');
foreach(string colData in lineData)
{
     //store data into appropriate collections and push it to database
}

答案 2 :(得分:0)

除了已经提出的其他解析技术之外,您还可以将TextFieldParser类(在Microsoft.VisualBasic.FileIO命名空间中)与您已编写的ADO.Net代码结合使用