2

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

例如,我们有;

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

伪代码可能看起来像;

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

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

考虑到我以前没有见过这种技术,而且我的经验有些有限,有这个名字吗?这是常见的做法,还是只是另一个过于字符串化的例子?要扩展现有代码,我应该继续使用字符串方法吗? 我们是否从供应商那里获得了粗俗的代码?

4

2 回答 2

2

我在评论中的内容仍然有效,但我真正的答案是:这可能是关于兼容性/可移植性的设计决定。在您的整数数组案例(以及足够低级别的 API)中,您通常会发现自己会问诸如“今天”机器上整数大小的安全猜测是什么。字节序呢。

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

如果您想要快速的东西,只需将提供给您的任何内容转换为更有效的内部格式,您进行处理并将其转换回来。

于 2012-07-31T15:42:51.280 回答
0

使用逗号分隔的字符串而不是数组本身并没有错。当然,您不能轻易访问n这样一个集合的 random 元素,但如果不需要这样的随机访问,那么它不会受到任何惩罚,对吧?

据我所知,出于非常实际的原因, Oracle DB 将NUMBER值存储为字符串(如果我的记忆是正确的 - 对于s 也是如此)。DATE

在您的具体示例中,在处理传递数据而不跨越进程边界时,使用字符串似乎是一种过度杀伤力。但是,当通过线路发送数据或存储在磁盘上时,字符串数据类型的选择是否更有意义?

于 2012-07-31T15:43:22.997 回答