CSV字符串与数组:这是字符串类型?

时间:2012-07-31 15:01:56

标签: arrays string performance

我在供应商提供给我们的生产环境中遇到了一些现有代码。它们使用字符串存储逗号分隔值以存储来自DB的过滤结果。请记住,这是一种名为PowerOn 的专有脚本语言,它与驻留在AIX系统上的数据库进行交互,但它是一种支持字符串,整数和数组的语言。

例如,我们有;

Account
----------------
123
234
3456
28390

psuedo代码可能看起来像;

Define accounts As String
For Each Account
   accounts=accounts + CharCast(Account) + ","
End

与我希望看到的东西相反

Define accounts As Integer Array(99)
Define index as Integer=0
For Each Account
   accounts(index)=Account
   index=index+1
End

循环完成时,accounts看起来像; 123,234,3456,28390,。该字符串稍后用于测试特定实例是否存在,如此

If CharSearch("28390", accounts) > 0 Then Call DoSomething

在该示例中,语句的计算结果为true,并且DoSomething被调用。 考虑到数组的选项,为什么要在一串逗号分隔值中存储整数值?我遇到的每种语言,执行基于字符串的操作几乎总是比基于整数的操作更昂贵

考虑到我之前没有见过这种技术,而且我的经验有所限制,有没有这个名字?这是常见的做法,还是仅仅是另一个字符串类型的例子?要扩展现有代码,我应该继续使用字符串方法吗?我们是否从供应商处获得了严格的代码?

2 个答案:

答案 0 :(得分:2)

我在评论中的内容仍然存在,但我的真实答案是:它可能是关于兼容性/可移植性的设计决策。在整数数组的情况下(以及足够低的API级别),您通常会发现自己会问一些问题,例如,对“今天”机器上整数大小的安全猜测。那么字节序呢。

所有数据格式中最便携和最灵活的一直是并且始终将是打印表示。它可能没有那么快处理,但这就是适配器/转换器或者这样的地方。我不会惊讶地发现(人类可读的)在像你这样的数据库API中的特别是的表示描述

如果你想要快速的东西,只需拿走给你的东西,将它转换成更有效的内部格式,你处理并转换回来。

答案 1 :(得分:0)

使用逗号分隔的字符串而不是数组没有任何内在错误。当然你不能随便访问这样一个集合的随机n元素,但是如果不需要这样的随机访问那么它就没有惩罚了,对吧?

据我所知,Oracle DB将NUMBER值存储为字符串(如果我的记忆是正确的,那么对于DATE也是如此)。

在您的具体示例中,在处理传递数据而不跨越进程边界时,使用字符串看起来有点过分。但是,当通过网络发送数据或存储在磁盘上时,字符串数据类型的选择是否更有意义?