我使用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...
条目理解为数字,因此将所有条目都读为数字。
答案 0 :(得分:0)
要使Text ODBC驱动程序正确检测列类型,应引用值:
Index,Value
'SK1202',1
'SK1445',2
'SK0124',3
'SK7896',4
'SK1',5
'AB1234',6