Parsing “数字符号”;SK";

Parsing “数字符号”;SK";,parsing,odbc,number-formatting,ampl,Parsing,Odbc,Number Formatting,Ampl,我使用ODBC表处理程序将Excel和CSV文件中的数据读取到AMPL模型中。但我遇到的事情可能与我使用的精确程序和编程语言没有多大关系 数据中有两种特定类型的字符串:三位字母和六位字母数字 当三位字母类型包含NAN字符串时,AMPL抛出错误。我发现,原因是它将NAN理解为“NAN”(不是数字)。它不能将此用作索引 六位字母数字类型有时包括字符串,如3E1234。这似乎是个问题,因为AMPL(或处理程序)将其理解为科学记数法中的数字。所以它读作3*10^1234,被处理为无穷大。因此,当有一个3

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

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

当三位字母类型包含
NAN
字符串时,AMPL抛出错误。我发现,原因是它将
NAN
理解为“NAN”(不是数字)。它不能将此用作索引

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

我理解这两个。虽然他们很烦人,但我可以接受。现在我遇到一个字符串
SK1234
被解析为数字1234。我在大学里学过一点编程,但我不知道为什么会发生这种情况。前缀SK有什么特别的吗

编辑:下面是一个重现错误的示例:

模型文件:

set INDEX;
param value;
“运行”文件:

运行完所有这些代码后,我键入
displayindex
并获取

set INDEX := 1202 1445 124 7896 1 Missing;
因此,字段
索引
被视为一个数字字段,前五个条目被转换为一个数字。无法转换最后一个条目,因此将其视为
缺失


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

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

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

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

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

您可以发布用于读取数据的AMPL代码吗?@vitaut:我添加了一个示例CSV“文件”和代码。您可以发布用于读取数据的AMPL代码吗?@vitaut:我添加了一个示例CSV“文件”和代码。我同时也发现了这一点。但是为什么这些值被读取为数字?@karlklamer这就是ODBC驱动程序中自动类型检测的工作方式。您可以使用schema.ini覆盖它:我同时也发现了这一点。但是为什么这些值被读取为数字?@karlklamer这就是ODBC驱动程序中自动类型检测的工作方式。您可以使用schema.ini覆盖它:
Index,Value
'SK1202',1
'SK1445',2
'SK0124',3
'SK7896',4
'SK1',5
'AB1234',6