如何处理更改的字符串变量的子字符串

时间:2015-10-02 10:32:53

标签: c# sql row

我目前正在开发一个插入数据库的Excel阅读器。事情进展顺利,直到我偶然发现Excel表格中的一些变化。

100行,其中一些位于工作表的中间,具有与工作表其余部分不同的样式,并且我的子字符串失败。

在这里给出一些澄清,通常看起来如何:

DMK.2003602
DMK.4663501
DMK.3307301
etc.

要获取数字,我在行中的列上使用substring,如此

row[12].ToString().Substring(4).ToString());

非常简单。但是在某些时候它会改变这个

82AVG.A410201

我的子字符串不起作用,插入数据库时​​出现类型错误。

关于如何在行循环期间处理此类更改的任何线索?

这是我的循环,

foreach (var row in albums)
            {
                if (row.ItemArray.Length == 33 && row.ItemArray[0].ToString() != ""
                                              && row.ItemArray[1].ToString() != ""
                                              && row.ItemArray[2].ToString() != ""
                                              && row.ItemArray[3].ToString() != ""
                                              && row.ItemArray[4].ToString() != ""
                                              && row.ItemArray[5].ToString() != "")
                {
                        Order ord = new Order(      
                        1, 
                        maxTrNo +1,
                        row[6].ToString().Substring(row[6].ToString().Length - 5).ToString(),
                        1,
                        numVal,
                        row[13].ToString(),
                        "",
                        row[12].ToString().Substring(4).ToString()); //This is where it fails
                        orders.Add(ord);
                        maxTrNo++;

                }
            }

2 个答案:

答案 0 :(得分:1)

只需要在'。'之后获取字符串的一部分,就可以使用(假设在DMK2003602'或者#39; DMK2003602的情况下你想要空字符串。&# 39)

var str = "DMK.2003602";
var subStr = str.IndexOf('.') > -1 && str.IndexOf('.') < str.Length -1 ? str.Substring(str.IndexOf('.') + 1) : string.Empty;

但是对于数据库插入错误,可能还有其他原因。

答案 1 :(得分:1)

使用string.IndexOf('.')获取点后面的字符

string s = row[i].ToString();
string afterDot = s.Substring(s.IndexOf('.' + 1));

处理没有点的情况

int dot = s.IndexOf('.');
string afterDot = dot == -1 ? string.Empty : s.Substring(dot + 1);