如何处理不断变化的字符串变量上的子字符串
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);
我目前正在开发一个 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);