Форум » Clipper » перекодирока dbf в 866 кодовую страницу » Ответить

перекодирока dbf в 866 кодовую страницу

SergeyKorotun: В dbf базе украинский текст набран с помощью утилиты keyrus. Какая это кодовая страница - не знаю. Если данные из этой базы перенести в другую dbf базу, которая использует 866 кодовую страницу, то в новой базе эти данные не читабельны. Как средствами clipper5 преобразовать данные в 866 кодовую страницу, а если это невозможно, то какой сторонней утилитой можно сделать данное преобразование?

Ответов - 37, стр: 1 2 All

petr707: Так у Вас просто обмен данными между двумя программами или последовательная обработка. В этом случае не обязательно иметь полный общий DBF, в котором нужно менять байт в заголовке софтом нижнего уровня. 1) Экспорт(fox - в папку обмена для clipper) - импорт (clipper)- экспорт(для fox)- импорт ( fox - от cliiper) в качестве носителя данных - возможен DBF без кодовой странциы или простой ASCI txt-файл 2) Зачем нужен Clipper для этой задачи? Перекодировку можно сделать в рамках и только одного Fox: одну таблицу создать с одной кодовой страницей, вторую - с другой Преобразовать при копировании полей первого DBF во второй DBF или через TXT-файл

SergeyKorotun: Я ранее уже писал что задача решена, но хотелось больше ее автоматизировать. 1. Есть чужая откомпилированная прога на визуал фокспро 7. В базах бардак. 2. Есть чужая прога на фокспро 2.6, в базах которой порядок и там есть данные для первой проги. 3. Нужно из баз второй проги перенести некоторые данные в базы первой проги. Поскольку фокспро не знаю, с помощью этого форума написал программу на клиппере 5.01, которая собирает из нескольких таблиц второй проги базу, которую средствами клиппера перекодирую с CP1125 в CP866 и некоторые данные переношу в базу первой проги. 4. Поскольку клиппер обнулил 29 байт базы второй проги, инфа с второй проги будет во второй проге отображаться крякозябрами. (любой вьювер отображает данные нормально) 5. Чтобы изменить 29 байт, открываю в визуал фокспро 7 базу (use dbfname exclusive), фокспро сам выбрасывает окно с предложением выбрать кодовую страницу, выбираю 866 и выхожу с фокспро. В результате 29 байт заполнен номером 866 кодовой страницы. 6.Подбрасываю базу во вторую прогу, и после этого она нормально отображает символьные данные. 5 пункт хотелось бы выполнить средствами клиппера, чтобы все выполнить с помощью одной клипперовской программы

Andrey: SergeyKorotun пишет: ЮЛЎЯ СТАНЎСЛАВ СВЎТЛАНА ЛЕОНЎД МАРЎЯ РА°СА ВАЛЕРЎЙ АНАТОЛЎЙ ВЎРА ЇВГЕНЎЙ ЎННА АНАСТАСЎЯ ЮРЎЙ Надо перекодировать: Перекодировка Украина ГОСТ cp1125 -> cp866 Нужен DBF файл, я не могу собрать DBF из этих ИМЕН.... SergeyKorotun пишет: Если возможно, занесите в 29 байт (по счету - 30-ый, отсчет байтов ведется с нуля) номер 866 кодовой страницы. Вот примерно так (править под себя): #include "fileio.ch" FUNCTION Save29b(cFile) LOCAL hFile, nStatus, nSizeFile, cStream, cNewStr hFile := FOPEN( cFile, FO_WRITE ) nStatus := FERROR() IF nStatus # 0 ALERT( "ОШИБКА ! " + "Не смог открыть файл: "+cFile ) ELSE nSizeFile := FSEEK(hFile,0,FS_END) // конец файла = 2 IF nSizeFile == 0 // Считаем длину файла ALERT( "ОШИБКА ! " + "Файл: "+cFileInp+" ПУСТОЙ !") ELSE FSEEK(hFile,0,FS_SET) // начало файла = 0 cStream := Space( 30 ) FRead( nFileHandle, @cStream, 30 ) // считать 30 байт cNewStr := SUBSTR(cStream,1,28)+"вставить нужный вам ОДИН символ"+SUBSTR(cStream,30) FSEEK(hFile,0,FS_SET) // начало файла = 0 nStatus := FWRITE(hFile, cNewStr, 30) // запись 30 байт IF nStatus # 0 ALERT( "ОШИБКА ("+LTRIM(STR(nStatus))+") ! " + "Не смог записать файл: "+cFile ) ENDIF ENDIF ENDIF FCLOSE( hFile ) RETURN NIL


SergeyKorotun: Andrey пишет: Нужен DBF файл, я не могу собрать DBF из этих ИМЕН.... Перенеси имена в текстовый файл и добавь в базу родной утилитой клиппера - dbu.exe (F6, добавить, выбрать SDF и выбрать текстовый файл с именами) Andrey пишет: Вот примерно так (править под себя): Скрытый текст А ограничение на длину бинарного файла есть? Базы большие.

Andrey: SergeyKorotun пишет: Перенеси имена в текстовый файл и добавь в базу родной утилитой клиппера - dbu.exe (F6, добавить, выбрать SDF и выбрать текстовый файл с именами) Вот вы и проделайте эту работу. У меня русская 1251 кодировка на компе, ставить украинскую не когда. Если вам "влом" сделать DBF-ник и выложить здесь, то тогда продолжать разговор не чего ! SergeyKorotun пишет: А ограничение на длину бинарного файла есть? Базы большие. Запись идет 30 байт (ПЕРВЫХ) в базу, какой размер файла - это до лампочки !

SergeyKorotun: Andrey пишет: Вот вы и проделайте эту работу. У меня русская 1251 кодировка на компе, ставить украинскую не когда. Если вам "влом" сделать DBF-ник и выложить здесь, то тогда продолжать разговор не чего ! Я не знаю как вставить файл, поэтому базу импортировал в текстовый файл и несколько имен вставил в сообщение. Кнопка "файл с компьютера" делает переадресацию на сайт, на котором можно вставить только картинку. По поводу продолжения разговора: я уже пару раз писал, что перекодировку сделал программно, поэтому дополнительная утилита мне уже не нужна. Вы просили, я протестировал, нет в проге перекодировки с дос 1125 в дос 866. Если подскажите как присоединить файл, базу я вам выложу.

AlexMyr: SergeyKorotun пишет: Я не знаю как вставить файл Синяя стрелка вниз (файл с компьютера).

SergeyKorotun: AlexMyr пишет: Синяя стрелка вниз (файл с компьютера). при нажатии открывает http://photo.qip.ru/index.php на котором можно вставить только картинку

SergeyKorotun: Для Andrey отправил вам базу на 30195@mail.ru

Dima: SergeyKorotun пишет: при нажатии открывает http://photo.qip.ru/index.php на котором можно вставить только картинку файл можно выложить на любой файло обменник , к примеру files.mail.ru и продублировать сюда ссылку , что то типа http://files.mail.ru/FBD6TR (это просто пример)

SergeyKorotun: база для перекодировки из ср1125 в ср866 http://us.ua/1024583/

Andrey: SergeyKorotun пишет: база для перекодировки из ср1125 в ср866 Вот программа (и исходник) для перекодировки на МиниГуи - http://files.mail.ru/D2E69525A38D43F3B1734C3B07081E82 Можно сделать ехе-ник транслятор в любую кодовую страницу, где параметры задаются в командой строке, без диалога. Забыл язык указать правильно... Замените сами на эти строки: SET LANGUAGE TO UKRAINIAN SET CODEPAGE TO UKRAINIAN

SergeyKorotun: Доработанная функция Андрея по смене 29 байта базы //chr(101) for cp866 //chr(201) for cp1251 #include "fileio.ch" clear screen Set29biteInCP866("c:\proba.dbf") FUNCTION Set29biteInCP866(cFile) Local nFile, nStatus, nSizeFile, cStream nFile:=Fopen(cFile,FO_WRITE) nStatus:=FError() if ((nFile=-1) .or. (nStatus!=0)) alert("Номер вiдкритого файла: "+ltrim(str(nFile))+";Помилка! Неможливо вiдкрити файл:;"+cFile+";Код помилки ДОС: "+ltrim(str(nStatus))) return NIL endif nSizeFile := FSEEK(nFile,0,FS_END) //alert("Size file "+str(nSizeFile)) nSeek:=FSEEK(nFile,29,FS_SET) if nSeek<>29 alert("Не вдалося перемiстити курсор в 29 байт;для змiни номеру кодової сторiнки на CP866;Зробiть це за допомогою visual foxpro 7; use "+alltrim(cFile)+" exclusive; i виберiть 866 кодову сторiнку") Fclose(nFile) return NIL endif cStream=chr(101) //chr(201) for cp1251 nWriteBites:=Fwrite(nFile, cStream, 1) nStatus:=FError() if nWriteBites<>1 Alert("Не вдалося змiнити номер кодової сторiнки в файлi:;"+cFile+";"+"Код помилки ДОС: "+ltrim(str(nStatus))) endif FClose(nFile) Return NIL

SergeyKorotun: Задача скорее не имеет решение, но все же сформулирую. Клиентам раздается программа с заполненной данными базой: tin c 10 sum n 16.2 fio c 60 Клиент на основе данных этой базы с помощью программы создает новую базу: tin c 10 tin_cl c 10 sum n 16.2 sum_cl n 16.2 fio c 60 fio_cl c 60 Программа после поиска tin или fio в первой базе заполняет пары get полей (tin и tin_cl, sum и sum_cl, fio и fio_cl) одинаковыми значениями и если некоторые данные неверные, клиент должен исправить их в полях tin_cl, sum_cl, fio_cl. Поля tin, sum, fio недоступные для редактирования и отображают значения из первой базы. В первую базу заносились данные прогой, использующей 866 кодовую станицу (но через использование сторонних программ в первой базе присутствуют данные в разных кодировках. Во вторую базу в поля *_cl данные заносятся в кодовой странице 1125 (используется кейрус) Требуется данные в поле fio_cl перекодировать в 866 кодовую страницу.

Andrey: SergeyKorotun пишет: Во вторую базу в поля *_cl данные заносятся в кодовой странице 1125 (используется кейрус) Требуется данные в поле fio_cl перекодировать в 866 кодовую страницу. Сделай эту программу на хХарборе, отличия от Клипера минимальны, и заморачиватся с кодировками не будешь. Как сделать программу на хХарборе смотри http://clipper.borda.ru/?1-6-0-00000002-000-0-0-1355737108

SergeyKorotun: Andrey пишет: Сделай эту программу на хХарборе, отличия от Клипера минимальны, и заморачиватся с кодировками не будешь. Заморачиваться придется, так как исходная база (сp1125) берется с одной чужой проги, с помощью клипперовской проги правится база (ср866) другой чужой проги, используя данные с первой базы. Помогла бы утилита наподобии кейруса, но переводящяя коды символов не в ср1125, а в ср866. Существует такая?

Andrey: SergeyKorotun пишет: Существует такая? Не знаю !



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