Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
DAndrey
Member

Откуда:
Сообщений: 170
Программа обработчик, написана на старом FoxPro 2.6. в файле config.fp CODEPAGE=866. Системой клиент-банк выписка выгружается в DBF файл с внутренней кодировкой 866, а структура таблицы с кодировкой 1251, если ручками менять символ обозначающий кодировку таблицы с CHR(201) на CHR (101), то все прекрасно. В самой программе клиент-банк никаких возможностей смены кодировки таблицы экспорта нету. Как можно открывать таблицу с кодировкой 1251, если вся программка использует кодировку 866 ????
24 фев 12, 11:19    [12145583]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
Dima T
Member

Откуда:
Сообщений: 15285
DAndrey
если ручками менять символ обозначающий кодировку таблицы с CHR(201) на CHR (101), то все прекрасно.

Автоматизировать это действие что мешает?
24 фев 12, 11:51    [12145788]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
DAndrey
Member

Откуда:
Сообщений: 170
Dima T,
Придется открывать файл менять, обрабатывать, а потом обратно менять . Так как пытался оставить в описании таблицы 866 кодовую страницу, тогда совсем не понятная кодировка получается при выгрузки из клиент-банка. Может есть другое решение данной проблемы ????
24 фев 12, 12:04    [12145869]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
Dima T
Member

Откуда:
Сообщений: 15285
DAndrey
Может есть другое решение данной проблемы ????

Как по твоему должно выглядеть другое решение?
У тебя кривой генератор в клиент-банке. Он пишет данные в 866 (ДОС) кодировке, а в заголовке DBF ставит что читайте как 1251 (CHR(201) обозначает 1251 по стандартам).

Можешь CPCONVERT() использовать для смены кодовой страницы, только этой функции нет в FPD 2.6 for DOS если не ошибаюсь.
DAndrey
Придется открывать файл менять, обрабатывать, а потом обратно менять .

Обратно-то зачем менять? хочешь исходный файл сохранить - делай копию и в ней меняй. Еще раз повторюсь - файл изначально кривой. И приведение его в порядок - не криминал, а самое правильное решение.
Сложного ничего не вижу:
proc Set866CP
lpara tcFile
local lnH, llOk
lnH = FOPEN(tcFile, 2)
if lnH > 0
	FSEEK(lnH, 29)
	FWRITE(lnH, CHR(101))
	FCLOSE(lnH)
	llOk = .T.
endif
return llOk

Можешь сверху еще анализатор неправильной кодировки прикрутить, в 866 многие русские буквы имеют коды непечатаемых символов в 1251 и наоборот.
24 фев 12, 12:43    [12146109]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
DAndrey
Member

Откуда:
Сообщений: 170
Dima T,

Функции CPCONVERT() точно нету, а функция Set866CP с небольшими доработками заработала. СПАСИБО !!!
24 фев 12, 13:51    [12146738]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1547
DAndrey
Dima T,

Функции CPCONVERT() точно нету
Точно? А это что?
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і CPCONVERT() і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
CPCONVERT(<expN1>,<expN2>, <expC>)

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Converts the character expression <expC> from one code page
(<expN1>) to another (<expN2>).
Return value - Character
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

CPCONVERT() is commonly used to translate character or memo
fields or character expressions to the current code page. Use
CPCURRENT() to determine the current code page. Note that
CPCONVERT() isn't required for normal cross-platform
functioning of the product. It is strictly used to access the
underlying translation facilities of FoxPro.

For example, if the variable x contains a character that on
the Macintosh (in code page 10000) would look like then this
command will return a character that will look like when
viewed under the ANSI character set (code page 1252) in
Microsoft Windows.

CPCONVERT(10000, 1252, x)

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

See Also:  International/X-Platform, CPCURRENT(), CPDBF(),
MODIFY COMMAND/MODIFY FILE, SET NOCPTRANS

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

А еще там есть вот это:
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і OEMTOANSI() і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
OEMTOANSI(<expC>)

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Converts each character in a character expression to the
corresponding character in the ANSI character set.
Return value - Character
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

OEMTOANSI() is supported in FoxPro for Windows and FoxPro for
Macintosh.

Use OEMTOANSI() to move data from FoxPro for MS-DOS to FoxPro
for Windows and FoxPro for Macintosh.

<expC>
OEMTOANSI() converts each character in <expC> to the
corresponding character in the ANSI character set. The
character expression <expC> should contain characters
from the MS-DOS (OEM) character set.

If a character in <expC> doesn't have an ANSI equivalent,
the character is converted to a similar ANSI character.
For example, MS-DOS line-drawing characters might not be
found in the ANSI character set.

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

See Also: ANSITOOEM(), CHRTRAN(), SYS(15) Character
translation

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
24 фев 12, 14:07    [12146942]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
DAndrey
Member

Откуда:
Сообщений: 170
Sergey Sizov,

Sorry !!! Но в FoxPro 2.6. for DOS такие функции отсутствуют
24 фев 12, 14:13    [12147004]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1547
DAndrey
Sergey Sizov,

Sorry !!! Но в FoxPro 2.6. for DOS такие функции отсутствуют
Думаешь, я это всё придумал? Не поверил, что я это их хелпа вырезал? И не попробовал непосредственно в FPD 2.6?
24 фев 12, 14:34    [12147151]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
DAndrey
Member

Откуда:
Сообщений: 170
Sergey Sizov,

Как ни странно но я тоже попробовал для интереса и не поверите система выдала "Function not implemented" .
24 фев 12, 15:35    [12147687]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
XAndy
Member

Откуда: Киев
Сообщений: 326
DAndrey,

Если у вас нет, значит ваш FPD26 подозрительно напоминает FPD20 ))))))))
24 фев 12, 15:56    [12147902]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
проходящий.
Guest
DAndrey
Программа обработчик, написана на старом FoxPro 2.6. в файле config.fp CODEPAGE=866. Системой клиент-банк выписка выгружается в DBF файл с внутренней кодировкой 866, а структура таблицы с кодировкой 1251, если ручками менять символ обозначающий кодировку таблицы с CHR(201) на CHR (101), то все прекрасно. В самой программе клиент-банк никаких возможностей смены кодировки таблицы экспорта нету. Как можно открывать таблицу с кодировкой 1251, если вся программка использует кодировку 866 ????


Если не читается:

*Запускаем cpzero - в комплекте фокспро есть
cpzero.prg таблица.DBF (этим дейстием обнулим кодовую страницу)

*Открываем таблицу
USE таблица.DBF

* фокс выдаст окошко с просьбой указать кодировку. Указываем 1251 если она была создана в 1251.
BROWSE

* смотрим. если будут какозябрики то таблица.DBF заполнялась НЕ как 1251. начинаем сначала - cpzero и пробуем выбрать другую кодировку.
24 фев 12, 17:33    [12148875]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
проходящий.
Guest
Запускать cpzero можно с параметром
DO cpzero WITH таблица.DBF

Просто обнулит кодировку без лишних вопросов.
Утилита cpzero данные внутри таблицы не меняет.
24 фев 12, 17:41    [12148958]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
DAndrey
Member

Откуда:
Сообщений: 170
проходящий.,

Изредко нужно читать вопрос и судя по ответу не один раз. Решение у (Dima T) самое оптимальное. Я же не буду каждый раз запускать CPZERO, а если точнее то гл. бухгалтер. Система клиент-банк создает каждый раз новый файл при экспорте выписки.
24 фев 12, 18:48    [12149531]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1547
DAndrey
Sergey Sizov,

Как ни странно но я тоже попробовал для интереса и не поверите система выдала "Function not implemented" .
Проверяй версию своего фокса.
?version()
24 фев 12, 18:51    [12149549]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
DAndrey
Member

Откуда:
Сообщений: 170
Sergey Sizov,

?version() выдает FoxPro 2.6 (X)
24 фев 12, 18:55    [12149581]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
AndreTM
Member

Откуда: Где-то в вологодских лесах...
Сообщений: 6901
DAndrey
?version() выдает FoxPro 2.6 (X)
Кошерная версия должна выдавать 2.Xx, где вместо большого хрена - буковка версии, вместо маленького - буковка релиза. Так что XAndy был недалёк от истины...
24 фев 12, 19:36    [12149833]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
проходящий.
Guest
DAndrey
проходящий.,

Изредко нужно читать вопрос и судя по ответу не один раз. Решение у (Dima T) самое оптимальное. Я же не буду каждый раз запускать CPZERO, а если точнее то гл. бухгалтер. Система клиент-банк создает каждый раз новый файл при экспорте выписки.

Что за дебильный ответ?
DO cpzero WITH 'таблица.dbf',1251 && Одна строчка.

И такие отпетые двоечники как ты работают с банком?
24 фев 12, 20:26    [12150038]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
1122112211
Guest
проходящий.
DO cpzero WITH 'таблица.dbf',1251 && Одна строчка.

Те же яйца только в профиль. cpzero точно также меняет 30-й байт. Какая разница чем менять своей функцией или предложенной MS?
24 фев 12, 20:36    [12150100]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
проходящий.
Guest
1122112211
проходящий.
DO cpzero WITH 'таблица.dbf',1251 && Одна строчка.

Те же яйца только в профиль. cpzero точно также меняет 30-й байт. Какая разница чем менять своей функцией или предложенной MS?

Вот и я о том же.
Dima T тут целую поибень накатал, когда есть готовая утилита cpzero.prg в дистрибутиве фокса :))
24 фев 12, 20:45    [12150135]     Ответить | Цитировать Сообщить модератору
 Re: Снова кодовая страница таблицы и старый добрый FPD 2.6 for DOS  [new]
1122112211
Guest
проходящий.
Dima T тут целую поибень накатал, когда есть готовая утилита cpzero.prg в дистрибутиве фокса :))

Ну знаешь, если для тебя 9 строк это мегапрога, то не знаю чего сказать в ответ. По моему их быстрее набить по памяти чем название cpzero.prg вспомнить, потом где она живет и в проект добавить.
24 фев 12, 20:52    [12150167]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить