数字符号“SK”
Posted
技术标签:
【中文标题】数字符号“SK”【英文标题】:Number notation "SK" 【发布时间】:2016-03-06 23:10:51 【问题描述】:我使用 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
是一个用户 DSN,它使用相应文件夹中的 Microsoft 文本驱动程序。
以及 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...
条目理解为数字,因此将所有内容读取为数字。
【问题讨论】:
能否贴出用于读取数据的 AMPL 代码? @vitaut:我添加了一个示例 CSV“文件”和代码。 【参考方案1】:为了让 Text ODBC 驱动程序正确检测列类型,值应该被引用:
Index,Value
'SK1202',1
'SK1445',2
'SK0124',3
'SK7896',4
'SK1',5
'AB1234',6
【讨论】:
我同时也发现了这一点。但是为什么这些值被读取为数字? @KarlKlammer 这正是此 ODBC 驱动程序中自动类型检测的工作方式。您可以使用 schema.ini 覆盖它:msdn.microsoft.com/en-us/library/ms709353(VS.85).aspx以上是关于数字符号“SK”的主要内容,如果未能解决你的问题,请参考以下文章
用 Python3.10 和 OpenSSL-1.1 编译 C:未定义符号“OPENSSL_sk_num”