Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Конвертирование codepage 1251 в 866 / 10 сообщений из 10, страница 1 из 1
06.10.2006, 10:13
    #34036700
rino_lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертирование codepage 1251 в 866
Всем привет ! Натолкните на мысль. Проблемка следующая. В папке есть куча DBF-файлов с кодовой страничкой 1251. Есть желание программно конвертировать
их в 866. Заполняю ADIR()-ом массив.Организую цикл по кол-ву файлов и при открытии таблицы появляется окно диалога выбора codepage. Это все хорошо , но
в том случае , если таблиц не более десятка. В моем случае - их более 300. Заранее спасибо.
...
Рейтинг: 0 / 0
06.10.2006, 10:46
    #34036801
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертирование codepage 1251 в 866
А использовать cpzero.prg НЕ пробовали???
...
Рейтинг: 0 / 0
06.10.2006, 11:57
    #34037100
rino_lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертирование codepage 1251 в 866
Владимир , а если подробнее.
...
Рейтинг: 0 / 0
06.10.2006, 12:08
    #34037151
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертирование codepage 1251 в 866
Посмотри файлик:
...\Microsoft Visual FoxPro 9\Tools\Cpzero\Cpzero.prg

И еще. В Config.fpw строка
Код: plaintext
Codepage =  1251 
стоит???
...
Рейтинг: 0 / 0
06.10.2006, 12:15
    #34037176
rino_lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертирование codepage 1251 в 866
Владимир , спасибо за подсказку . Сейчас буду пробовать.
...
Рейтинг: 0 / 0
06.10.2006, 13:57
    #34037638
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертирование codepage 1251 в 866
rino_lanВсем привет ! Натолкните на мысль. Проблемка следующая. В папке есть куча DBF-файлов с кодовой страничкой 1251. Есть желание программно конвертировать
их в 866. Заполняю ADIR()-ом массив.Организую цикл по кол-ву файлов и при открытии таблицы появляется окно диалога выбора codepage. Это все хорошо , но
в том случае , если таблиц не более десятка. В моем случае - их более 300. Заранее спасибо.
Здесь что-то в Вашей логике не правильно.

Если таблица уже имеет признак кодовой страницы, то окно диалога выбора CodePage не появляется.

Если таблица уже имеет признак кодовой страницы, то изменить этот признак, конечно можно, но после этого придется вручную перекодировать все содержимое. Ведь наполнение останется в старой кодовой странице.

Почитай описание следующих команд и функций

CPDBF()
CPCURRENT()
SET CPDIALOG
...
Рейтинг: 0 / 0
06.10.2006, 17:06
    #34038548
ORAselect
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертирование codepage 1251 в 866
Кодовая страница - это 29 байт в заголовке файла. Если в него записать 0, то при вызове из FoxPro система выведет запрос.
int main{
FILE * f;
f=fopen("C:\\My.dbf","r+");
fseek(f,28,0);
fputs('\0',sizeof(char),1,f);
fcloce(f);
}


Смысл во всяком случае именно такой. Если есть компилятор С, получите срумент для сбития бита кодировки. Может есть косяки -компилятор образумит.
...
Рейтинг: 0 / 0
06.10.2006, 17:10
    #34038559
ORAselect
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертирование codepage 1251 в 866
Если придется, можно перекодировать. Это просто: минусуйте 96 от символа и будет 1251->866. Прибавьте 96 будет 866->1251. Можно сделать простенький цикл по строке. Работает быстро.
...
Рейтинг: 0 / 0
06.10.2006, 17:43
    #34038663
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертирование codepage 1251 в 866
Может что нибудь наподобие вот такого?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
IF ADIR(a_file, 'oldFile\*.dbf')# 0    
  FOR i= 1  TO ALEN(a_file,  1 )
      lсFile=ALLTRIM(a_file(i,  1 ))
     use &lcFile alias t_tmp
     AFIELDS(a_tmp)
     CREATE table 'newFile\&lcFile'  codepage= 866  FROM ARRAY a_tmp
     APPEND FROM 'oldFile\&lcFile' as  866 
     use in &lcFile
  ENDFOR
endif  
...
Рейтинг: 0 / 0
06.10.2006, 17:47
    #34038673
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертирование codepage 1251 в 866
Если просто кодовую страницу пометить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
IF ADIR(a_file, 'oldFile\*.dbf')# 0    
	LOCAL lcFile
	FOR i= 1  TO ALEN(a_file,  1 )
		lcFile=ALLTRIM(a_file(i,  1 ))
		DO prg\cpzero WITH 'oldFile\&lcFile' ,  866 
	ENDFOR 
endif 
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Конвертирование codepage 1251 в 866 / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]