1

有没有办法强制容器将所有值存储为字符串?我正在使用 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)

关于如何解决这个问题的任何建议?

谢谢

4

3 回答 3

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。

于 2009-11-24T21:05:50.213 回答
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;
}
于 2009-11-27T18:18:38.677 回答
0

global:: str2con_RU () 这个我用过几次,相信大部分环境都有这个方法。

ledgerCon = str2con_RU(ledgerDimStr,#sep);

//或者

ledgerCon = Global::str2con_RU(ledgerDimStr,#sep);

于 2017-06-22T07:08:11.760 回答