powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Люди, что за автозамена буквы "і" при REPLACE?
12 сообщений из 12, страница 1 из 1
Люди, что за автозамена буквы "і" при REPLACE?
    #33648714
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикол свзязан с украинской буквой "і"
Присваиваю переменной sName значение с украинскими буквами "і", спрашиваю (105 код - это латинская "i"): ?CHR(105)$sname
отвечает - .F.
делаю REPLACE ab_name WITH sname
спрашиваю: ?CHR(105)$ab_name
отвечает - .Т.
Блин, что за автозамена такая хитрая происходит всех украинских букв "і" на латинские??? Главное у меня потом поиск не пашет нормально! Ведь остальные-то, характерные только для укр. языка символы не заменяются... с другой стороны оно и понятно - нет латинских аналогов... Интересно что операторы при вводе данных в базу используют при вводе украинский язык, а фокса при внесении этих данных непосредственно в БД получается незаметно заменяет эти буквы. А я тока ща расчехлился, написал быренько конвертилку, она отработала и потом я битый час удивлялся и мучался почему конвертилка ничего в БД не изменила... Может проблема в кодовой странице, присвоенной базе? Тогда как объяснить нормальное отображение остальных спецефичных укр. букв?

фокса 8я, в Options/General чекбокс Use system settings не стоит, винда ХРНЕ SP1, региональные установки Языковые стандарты - Русский, Расположение - Украина
...
Рейтинг: 0 / 0
Люди, что за автозамена буквы "і" при REPLACE?
    #33648902
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Файл CONFIG.FPW со строкой CODEPAGE=1251 - есть? Что возвращают функции

?CPCURRENT()
?CPDBF("MyTable")
...
Рейтинг: 0 / 0
Люди, что за автозамена буквы "і" при REPLACE?
    #33649188
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Файл CONFIG.FPW со строкой CODEPAGE=1251 есть и лежит в
c:\Program Files\Microsoft Visual FoxPro 8\
работает однозначно, т.к. в нем кастом-имя основного окна и оно соотв. так и называецца при запуске фоксы.

?CPCURRENT()
1251
?CPDBF("MyTable")
866 :)

ну так в 866 таблице все равно есть все укр. буквы. Или это оно так мне автоматом конвертит из среды фоксятины 1251 в КС базы 866?
...
Рейтинг: 0 / 0
Люди, что за автозамена буквы "і" при REPLACE?
    #33649236
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если буква одинаково выглядит в разных кодовых страницах - это вовсе не означает, что она имеет один и тот же ASCII-код. Какой тогда вообще смысл в кодовых страницах?

Посмотри реальный ASCII-код нужной буквы в переменной памяти. Скорее всего, он будет отличаться от 105

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
* Переменная памяти
FOR m.lnI= 1  TO LEN(m.sname)
	lcBukva = SubStr(m.sname,m.lnI, 1 )
	?m.lcBukva, ASC(m.lcBukva)
ENDFOR

* Поле таблицы
FOR m.lnI= 1  TO LEN(MyTable.sname)
	lcBukva = SubStr(MyTable.sname,m.lnI, 1 )
	?m.lcBukva, ASC(m.lcBukva)
ENDFOR

Именно поэтому, делать поиск опираясь на ASCII-коды в разных кодовых страницах - бессмысленно. Необходимо искать сам символ. Текст.
...
Рейтинг: 0 / 0
Люди, что за автозамена буквы "і" при REPLACE?
    #33649281
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я знаю, нормальной человеческой функции изменения КС в БД не существует. У меня есть програмка которая меняет КС в БД:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
m.fname=GETFILE("DBF")
DO WHILE NOT EMPTY(m.fname)
     m.fp_in = FOPEN(m.fname, 2 )
     =FSEEK(m.fp_in, 29 )
     =FWRITE(m.fp_in,CHR( 101 )) 
     =FCLOSE(m.fp_in)
m.fname=GETFILE("DBF")
ENDDO 
101 - соответствует КС-866
201 - соответствует КС-1251
...
Рейтинг: 0 / 0
Люди, что за автозамена буквы "і" при REPLACE?
    #33649305
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык ведь в том-то и весь прикол, что переменная которую я риплейсю в поле БД НЕ содержит символов с кодом 105, но с кодом 179. А как тока случается риплейс то все символы с кодом 179 превращаются в символы с кодом 105.
...
Рейтинг: 0 / 0
Люди, что за автозамена буквы "і" при REPLACE?
    #33649479
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы вообще в курсе, что такое "кодовая страница" и для чего она нужна?

Ведь физически хрянятся вовсе не буквы, а числа (ASCII-коды). У системы есть некая "карта соответствия", что вот такой ASCII-код надо отобразить вот таким символом. Какой код каким символом отображается и определяет кодовая страница.

Когда Вы набираете текст в FoxPro, то Вы набираете текст в кодовой странице 1251. В этой кодовой странице букве "i" соответствует ASCII-код 179.

Когда Вы записываете информацию из кодовой страницы 1251 в кодовую страницу 866, то FoxPro автоматически выполняет преобразование. Цель этого преобразования в том, чтобы "картинка" символа, созданного в 1251 в кодовой странице 866 осталась такой же. Т.е. необходимо подставить другой ASCII-код для того же самого символа.

Какая разница, как там часы "тикают"! Пользователь работает с текстом. С "картинкой". Именно на неизменность "картинки" и направлены все преобразования. ASCII-код - это "внутренняя механика" обеспечивающая нужную картинку в соответствующей кодовой странице.
...
Рейтинг: 0 / 0
Люди, что за автозамена буквы "і" при REPLACE?
    #33649946
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да елки-палки!!! Это все понятно!
Ну Вы так это подаете, как будто в фоксе зашита система OCR которая сканит экран и потом пытается найти соответсвие...
Но это же не так. Я так себе представляю - есть некие таблицы преобразования из одной КС в другую. Например там символу с кодом А в 1251 соответствует символ с кодом В в 866. Пользуясь этими таблицами фокса и конвертит. Иначе как тогда объяснить нормальное транслирование букв е, Е, а, А, Н, К и пр. которые есть в латинице с таким же изображением. Проблема получается в том, что происходит некорректное преобразование, когда именно названная мною буква из украинского алфавита зачем-то транслируется в латиницу. Ведь есть же в 866 КС соответствующая буква, или я ошибаюсь? Я програмлю со времен ДОСа и 2,6 фокса и была в 866 КС такая буква как и другие присущие украинскому языку.
...
Рейтинг: 0 / 0
Люди, что за автозамена буквы "і" при REPLACE?
    #33650009
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
позволю себе огласить проблему еще раз:
итак, проблема заключается в том, что фокса некореектно контвертит украинскую букву "i" из кодовой страницы 1251 в 866 превращая ее в латинкую букву ай, которая выглядит аналогично. а должна бы была транслировать в укр. букву "i" чей код в 866 таблице я точно не помню, но он за 200 где-то. вроде 247...
...
Рейтинг: 0 / 0
Люди, что за автозамена буквы "і" при REPLACE?
    #33650020
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёлки! я догадываюсь что проблема более гловального масштаба - в 866 странице вообще нет украинской буквы i/I... есть такая с двумя точками сверху, есть обёрнутая э/Э, а той, что нужно - нету... потому матричники до сих пор эту букву не чепятают, а вместо нее у с галочкой, котора ваще, кажися, белорусская буква какая-то...
...
Рейтинг: 0 / 0
Люди, что за автозамена буквы "і" при REPLACE?
    #33654438
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi CTAC-KO!

в CP866 никогда и не было украинской i - там массу места занимала
псевдографика...
Вот i с двумя точками там была. Белорусская у краткая тоже там есть.
Поскольку "отображение" латинской и кириллической i полностью совпадает, то
и происходит подобная конвертация при преобразовании между CP 1251 и CP 866.
А в cp1251 (и в некоторых других CP кстати тоже) действительно есть свой
собственный "код" для кириллической буквы i. "Двойная конвертация" (сначала
из "текущей" 1251 в 866 для записи на диск, а потом наоборот - из 866 на
диске в "текущую" 1251 в среде программы) как раз и приводит к "потере
соответствия".
Вот простая программа, показывающая все потенциальные проблемы, возникающие
при подобной схеме работы (т.е. использовании "неродной" CP в DBF)

FOR ln1 = 0 TO 255
IF ASC(CPCONVERT(866,1251,CPCONVERT(1251,866,CHR(m.ln1)))) # m.ln1
? m.ln1, ASC(CPCONVERT(866,1251,CPCONVERT(1251,866,CHR(m.ln1)))),
CHR(m.ln1), CPCONVERT(866,1251,CPCONVERT(1251,866,CHR(m.ln1)))
ENDIF
ENDFOR

Как видишь есть целая куча кодов которые вообще "теряются" - т.е. даже
визуально выглядят по иному после конвертации.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Люди, что за автозамена буквы "і" при REPLACE?
    #33655282
5631
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Им бы ваши проблемы.
http://www.excelforum.com/showthread.php?t=531338
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Люди, что за автозамена буквы "і" при REPLACE?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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