基于多个空格分割字符串

时间:2014-09-09 20:27:00

标签: c# vb.net

我有一个如下所示的字符串

ABC PQR 123  R1234 TREW     

我需要将其拆分并将单个值放入数据库中。

数据库表看起来像这样

Col1   Col2    Col3  Col4  Col5       Col6

 ABC   PQR     123         R1234      TREW

我可以使用split函数在空格处分割,但有时候会有多个空格,然后我想在表格中插入一个空白,所以在上面的字符串中,我在123和R1234之间有两个空格。我需要在Col4中插入空格来表示字符串的那一部分没有任何内容。可以有两个以上的空格,这意味着Col4和Col5都可以为空,所以每当有两个空格时,我需要在相应的列中输入空格,如果有一个空格,那么我需要在数据库中输入值。我怎样才能做到这一点。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

因此,只要值本身不包含空格,就会有空格分隔的列,而不是问题。您只需使用String.Split(new[]{' '}, StringSplitOptions.None)

 string[] allFields = str.Split(new[]{' '}, StringSplitOptions.None);

现在string[]中的每个字符串都是表格的列值。如果有一个空字符串,则表示该列的值也为空。

所以假设sql-server:

string[] allFields = "ABC PQR 123  R1234 TREW".Split(new[] { ' ' }, StringSplitOptions.None);
if(allFields.Length >= 6)   // == 6 if more values than columns is exceptional
{
    string sql = @"INSERT INTO table(Col1,Col2,Col3,Col4,Col5,Col6)
                   VALUES(@Col1,@Col2,@Col3,@Col4,@Col5,@Col6)";
    using(var con = new SqlConnection(Properties.Settings.Default.ConnectionString))
    using (var cmd = new SqlCommand(sql, con))
    {
        cmd.Parameters.AddWithValue("@Col1", allFields[0]);
        cmd.Parameters.AddWithValue("@Col2", allFields[1]);
        cmd.Parameters.AddWithValue("@Col3", allFields[2]);
        cmd.Parameters.AddWithValue("@Col4", allFields[3]);
        cmd.Parameters.AddWithValue("@Col5", allFields[4]);
        cmd.Parameters.AddWithValue("@Col6", allFields[5]);
        con.Open();
        int inserted = cmd.ExecuteNonQuery();
    }
}

答案 1 :(得分:0)

我想这可以使用TextFieldParser类解析。

拥有一个允许指定字段长度的look at this nice article

链接中的一部分:

reader.SetFieldWidths(5, 21, 7, -1)

使用它你也可以处理可变长度字段。