Форум » [x]Harbour » Ох уж эти буковки » Ответить

Ох уж эти буковки

Сергей Р: Не работает команда Append, хоть ты тресни. Точнее работает и на первый взгляд красиво. Теперь суть. Есть база кодировка 866. Создаю файл и командами Append добавляю туда информацию из других баз и все бы хорошо, но только маленькие русские буковки не всегда правильно лезут. Вот. Например вместо "р" лезет "а", вместо "т" лезит "в", вместо "ф" лезит"д". С большими буквами полный порядок. Наконец выговорился, одному трудно это выносить. Все.

Ответов - 18

Pasha: Такое может быть, если файлы открыты с разными кодировками: т.е: use t1 codepage ru866 use t2 codepage ru1251 t1->(dbAppend()) t1->f1 := t2->f1 будет выполняться перекодировка ru1251 -> ru866 Чтобы перекодировка не выполнялась, надо либо при открытии указывать одинаковую кодировку, либо не указывать ее вообще

Сергей Р: У меня выполняется вот такой блок: SELECT 001 s_struct=dbstruct() dbcreate(sf1,s_struct) SELECT 118 USE &SF1 EXCLUSIVE CODEPAGE RU866 APPEND FROM T001 FOR DATA >= GOD .AND. DATA <= MES APPEND FROM T003 FOR DATA >= GOD .AND. DATA <= MES Все файлы в досовской кодировке.

Pasha: надо или не указывать кодировку в команде use, или указать ее и в команде append: APPEND FROM T001 FOR DATA >= GOD .AND. DATA <= MES CODEPAGE RU866


Сергей Р: Такая конструкция не катит. Syntax error "syntax error at 'FROM' " Уже проходил. Harbour Version: 1.1.0dev

Сергей Р: А вот если открывать без указания кодовой таблицы, то действительно получается нормально. Но очень это все странно, почему только маленькие буковки и то избранно?

Pasha: Наверное, по умолчанию стоит кодировка 1251 Вот append from и перекодирует данные 1251->866 Но данные и так находятся в кодировке 866, и получается такой парадоксальный результат

Сергей Р: Спасибо, Паша, за помощь. Придется базу открывать дважды, без кодовой таблицы, а потом с кодовой таблицей. Может кто-нибудь добавит в команду APPEND параметр CODEPAGE.

Pasha: Дык он там есть Я когда-то и добавлял :) Возможно, что-то в препроцессоре Можно вызвать функцию __dbApp напрямую

Сергей Р: Спасибо, буду иметь ввиду.

PSP: Можно создать *.ppo и глянуть, чё получилось.

Pasha: Сергей Р пишет: Такая конструкция не катит. Syntax error "syntax error at 'FROM' " Уже проходил. Harbour Version: 1.1.0dev Похоже, что-то с препроцессором все-таки Я использую xHarbour сборки август-2008, и там эта команда еще компилировалась На xHarbour CVS гляну позже

Pasha: В include\std.ch должна быть команда: #command APPEND [FROM <(f)>] [FIELDS <fields,...>] ; [FOR <for>] [WHILE <while>] [NEXT <next>] ; [RECORD <rec>] [<rest:REST>] [ALL] [VIA <rdd>] ; [CODEPAGE <cp>] [CONNECTION <conn>] => ; __dbApp( <(f)>, { <(fields)> }, ; <{for}>, <{while}>, <next>, <rec>, <.rest.>, <rdd>, <conn>, <cp> ) Она есть ? с параметром codepage ?

Петр: Pasha, речь, наверное, про Harbour Harbour Version: 1.1.0dev И тогда все правильно, команда APPEND класс CODEPAGE не содержит. Топик-стартеру, все таки явно надо бы указывать на чем летает. Использовать __dbApp или то-что Pasha предложил #command APPEND [FROM <(f)>] [FIELDS <fields,...>] ; [FOR <for>] [WHILE <while>] [NEXT <next>] ; [RECORD <rec>] [<rest:REST>] [ALL] [VIA <rdd>] ; [CODEPAGE <cp>] [CONNECTION <conn>] => ; __dbApp( <(f)>, { <(fields)> }, ; <{for}>, <{while}>, <next>, <rec>, <.rest.>, <rdd>, <conn>, <cp> )

Pasha: Лучше добавить это на SVN Петр, напишите пожалуйста в mail list. Тем более, поддержка эта в Harbour есть

Петр: Да, так будет лучше. Сегодня вечером или завтра с утра добавлю.

Сергей Р: Спасибо ребята, очень полезные вещи делаете.

XVar: Есть возможность использовать HB_TRANSLATE( cFieldValue, cFrom,cTo ) в данном случае "RU866","RU1251" Только должно быть указано что то типа #ifdef __XHARBOUR__ REQUEST HB_CODEPAGE_RUWIN, HB_CODEPAGE_RU866 #define RUWIN "RUWIN" #else REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866 #define RUWIN "RU1251" #endif Кстати непонятно, эти реквесты обрабатываются во время компиляции или во время исполнения программы. Хотелось бы загрузить сразу все HB_CODEPAGE какие возможны или во время исполнения подключать необходимые.

Петр: XVar пишет: Кстати непонятно, эти реквесты обрабатываются во время компиляции или во время исполнения программы. Во время связывания программы Хотелось бы загрузить сразу все HB_CODEPAGE какие возможны или во время исполнения подключать необходимые. см. ответ на первый вопрос



полная версия страницы