数字符号" SK"

时间:2016-03-06 23:10:51

标签: parsing odbc number-formatting ampl

我使用ODBC表处理程序将Excel和CSV文件中的数据读入AMPL模型。但我遇到的事情可能与我使用的精确程序和编程语言没什么关系。

数据中有两种特定类型的字符串:三位字母和六位字母数字。

当三位数字母类型包含NAN字符串时,AMPL会抛出错误。正如我发现的那样,原因是它将NAN理解为" NaN" (不是数字)。它不能用它作为索引。

六位数的字母数字类型有时包括3E1234之类的字符串。这似乎是一个问题,因为AMPL(或处理程序)将此理解为科学记数法中的数字。因此它会显示3*10^1234,它被视为无穷大。因此,当有一个3E1234条目和一个3E1235条目时,它会将它们视为无穷大。

我理解这两个。虽然它们很烦人,但我可以解决这个问题。现在我遇到了一个字符串SK1234被解析为数字1234.我在大学里学到了一些编程,但我不知道为什么会这样。前缀SK有什么特别之处吗?

编辑:以下是重现错误的示例:

模型文件:

set INDEX;
param value;

"运行"文件:

table Table1 IN "tableproxy" "odbc" "DSN=NDE" "Test.csv": INDEX <- [Index], value ~ Value;
read table Table1;

NDE是在相应文件夹中使用Microsoft文本驱动程序的用户DSN。 和CSV文件:

Index,Value
SK1202,1
SK1445,2
SK0124,3
SK7896,4
SK1,5
AB1234,6

运行完所有代码后,我输入display INDEX并获取

set INDEX := 1202 1445 124 7896 1 Missing;

因此,字段Index被视为数字字段,前五个条目转换为数字。无法转换最后一个条目,因此将其视为Missing

DSN的设置是根据前25行设置类型。出于某种原因,它将SK...条目理解为数字,因此将所有条目都读为数字。

1 个答案:

答案 0 :(得分:0)

要使Text ODBC驱动程序正确检测列类型,应引用值:

Index,Value
'SK1202',1
'SK1445',2
'SK0124',3
'SK7896',4
'SK1',5
'AB1234',6