Мастера, подскажите как конвертировать данные из таблицы DBASE IV (cp 866 — Clipper)
в cp 1251 Paradox. Прооблема в том, что это нужно делать из программы, по одной записи а не всю таблицу сразу.
Здравствуйте Аноним, Вы писали:
А>Мастера, подскажите как конвертировать данные из таблицы DBASE IV (cp 866 — Clipper)
А>в cp 1251 Paradox. Прооблема в том, что это нужно делать из программы, по одной записи а не всю таблицу сразу.
На мастера не претендую, но способ знаю:
Берешь таблицу соответствия таблиц кодировок
unsigned char cpAltWin[0x100] = {
// Здесь по индексу символа в таблице cp866 лежит номер этого
// символа в Win1251 в количестве 256 штук.
};
...
// В месте перекодировки посылаешь строку, и делаешь
// посимвольное преобразование:
unsigned char cDecoded = cpAltWin[(unsigned char)someChar];
...
Ну, дальше — самодеятельность. Этот кусок кода можно оформить как функцию, перегоняющую содержимое одного буффера/контейнера в другой, либо in-place конвертить (тогда слева тот-же чар должен стоять, что и справа)...
Таблицу соответствия можно, например, получив, напечатав в Фаре (программно, конечно) эти самые 256 символов и их индексы в кодировке cp866, а потом просмотреть его в Win, и руками забить.
С уважением
Здравствуйте Kaa,
Спасибо за совет, если ничего другого не придумаю, то так и сделаю.
Я всетаки надеялся, что есть какая-то стандартная функция для этого
Здравствуйте IgMel, Вы писали:
IM>Спасибо за совет, если ничего другого не придумаю, то так и сделаю.
IM>Я всетаки надеялся, что есть какая-то стандартная функция для этого 
Позволю себе заметить, что этот способ — наиболее действенный и быстрый. Представь, ведь ты экономишь на вызове функции для каждого символа! Единственная операция — взятие элемента по индексу (1 раз) + присваивание. Куда быстрее? Да и зависить ни от кого не будешь
С уважением