有没有办法强制容器将所有值存储为字符串?我使用str2con将文本字符串拆分为容器。 每当一个只有数字的字段出现时,它就会被存储为一个int,这不是一个大问题。什么是一个大问题是当数字串超过整数大小并且数字变得不同时。
考虑以下字符串:
"Text1,Text2" Container becomes: str "Text1", str "Text2"
"1111111111,Text" Container becomes: int 1111111111, str "Text"
"8888888888,Text" Container becomes: int -961633963, str "Text" (THIS IS BAD)
有关如何解决这个问题的任何建议吗?
由于
答案 0 :(得分:2)
您可以通过查看Global.str2con方法了解Microsoft如何实现str2con。为了防止方法将整数添加到容器中,请复制该方法,并注释掉add2Ret子函数中的三行,以检查字符串是否只是数字。您可能不想修改现有的str2con函数,因为在调用此方法时,系统的其他部分可能依赖于实际上为整数的整数。
void add2Ret(str _current)
{
// v-artemt, 26 Jul 2004, PS#: 1741
//remove next three lines so only integers will be added as strings not integers
// if (match('<:d+>', _current))
// ret += str2int(_current);
// else
ret += _current;
}
或者你可以添加更复杂的逻辑来检查字符串的长度,如果字符串可能适合整数,则只使用str2int。
答案 1 :(得分:1)
以下是替代实施:
#define.Comma(",")
static container str2con_alt(str _string, str _separator = #Comma, boolean _ignoreNearSeparator = false)
{
container con = connull();
int pos, oldPos = 1;
str tmpStr;
do
{
pos = strscan(_string, _separator, pos ? pos + strlen(_separator) : 1, strlen(_string));
tmpStr = substr(_string, oldPos, pos ? pos - oldPos : strlen(_string) + 1 - oldPos);
if (tmpStr || ! _ignoreNearSeparator)
{
con += tmpStr;
}
oldPos = pos + strlen(_separator);
}
while (pos);
return con;
}
答案 2 :(得分:0)
全局::的 str2con_RU 强>() 我已经使用过一段时间了,我相信大多数环境都有这种方法。
ledgerCon = str2con_RU(ledgerDimStr,#sep);
//或
ledgerCon = Global :: str2con_RU(ledgerDimStr,#sep);