基于多个空格拆分字符串

本文关键字:字符串 拆分 空格 于多个 | 更新日期: 2023-09-27 18:21:27

我有一个字符串,如下

ABC PQR 123  R1234 TREW     

我需要对其进行拆分,并将各个值放入数据库中。

数据库表看起来像这个

Col1   Col2    Col3  Col4  Col5       Col6
 ABC   PQR     123         R1234      TREW

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

任何帮助都将不胜感激。

基于多个空格拆分字符串

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

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

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

所以假设sql服务器:

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();
    }
}

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

看看这篇很好的文章,它还允许指定字段长度。

链接中的一部分:

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

使用它,您还可以处理可变长度字段。