Обозначение номера СК

Я использую обработчик таблиц ODBC для чтения данных из файлов Excel и CSV в модель AMPL. Но то, с чем я столкнулся, вероятно, не имеет ничего общего с конкретными программами и языком программирования, которые я использую.

Среди данных есть два особых типа строк: трехзначные буквенные и шестизначные буквенно-цифровые.

Когда трехзначный алфавитный тип включает строку NAN, AMPL выдает ошибку. Как я выяснил, причина в том, что он понимает NAN как "NaN" (не число). Он не может использовать это как индекс.

Шестизначный буквенно-цифровой тип иногда включает такие строки, как 3E1234. Это кажется проблемой, потому что AMPL (или обработчик) понимает это как число в экспоненциальном представлении. Таким образом, он читается как 3*10^1234, что обрабатывается как бесконечность. Поэтому, когда есть одна запись 3E1234 и одна запись 3E1235, она видит их обе как бесконечность.

Я понимаю этих двоих. И хотя они раздражают, я могу с этим работать. Теперь я столкнулся с тем, что строка SK1234 анализируется как число 1234. Я немного изучил программирование в колледже, но понятия не имею, почему это происходит. Есть ли в префиксе SK что-то особенное?

EDIT: Вот пример, который воспроизводит ошибку:

Файл модели:

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... как числа и поэтому читает все как числа.


person KarlKlammer    schedule 06.03.2016    source источник
comment
Не могли бы вы опубликовать код AMPL, который вы используете для чтения данных?   -  person vitaut    schedule 07.03.2016
comment
@vitaut: я добавил пример файла CSV и код.   -  person KarlKlammer    schedule 13.03.2016


Ответы (1)


Чтобы драйвер Text ODBC правильно определял тип столбца, значения должны быть заключены в кавычки:

Index,Value
'SK1202',1
'SK1445',2
'SK0124',3
'SK7896',4
'SK1',5
'AB1234',6
person vitaut    schedule 14.03.2016
comment
Это я тоже узнал за это время. Но почему эти значения читаются как числа? - person KarlKlammer; 14.03.2016
comment
@KarlKlammer Именно так работает автоматическое определение типа в этом драйвере ODBC. Вы можете переопределить его с помощью schema.ini: msdn.microsoft. com/en-us/library/ms709353(VS.85).aspx - person vitaut; 14.03.2016