如何处理不断变化的字符串变量上的子字符串

How to handle substring on a changing string variable

我目前正在开发一个 Excel reader,它正在插入到数据库中。事情一直进展顺利,直到我偶然发现 Excel sheet.

中的一些变化

100 行,有些在 sheet 的中间,与 sheet 的其余部分具有不同的样式,我的子字符串失败了。

这里给出一些说明,它们通常是这样的:

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++;

                }
            }

只是为了获取'.'之后的字符串部分,您可以使用(假设在'DMK2003602'或'DMK2003602.'的情况下您想要空字符串)

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

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

使用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);