![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
Всем, привет!
Я в принципе создал этот топик, чтобы посоветоваться ![]() Есть такой код:
Вы пробовали когда-нибудь такое сделать? Дело в том, что в файле будет потом записано следующее (cм. картинку). Я тут просто что-то подумал, что проблема не велика и в принципе уже ее решил, но вот хотел вас спросить как бы вы боролись с такой трабл ![]() Напишите плиз просто ход ваших мыслей, а может уже вообще видели как эту проблему кто-нибудь решил. Просто интересно. Только не надо пока ничего программировать, а то получится, что сделаете тоже самое, что я уже сделал ![]() Мы пока просто посоветуемся, а потом я вывалю то, что сделал (если не пойму по ходу дискуссии, что сделал что-то не то ![]() Вобщем тема для обсуждения того, как бы вы начали решать (или уже когда-то решили) эту проблему. Всем спасибо! ![]() Присоединённый файл ( Кол-во скачиваний: 10 ) ![]() -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: 12 Всего: 35 |
cardinal, какой язык в системе определен для non-unicode programs?
P.S. у меня всё ОК. -------------------- Никогда не говори никогда |
|||
|
||||
bom |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 329 Регистрация: 22.2.2004 Где: Казахстан, Алматы Репутация: 4 Всего: 6 |
Наверное дело в свойствах двоичного файла, он не понимает русские символы и нужно явно указывать их коды, у меня была похожая задача, решил ее примерно так:
Сорру если повторил твое решение ![]() |
|||
|
||||
cardinal |
|
||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
А где это устанавливается? У меня win98...
Ну... похоже на мое ![]() Попозже выложу... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||
|
|||||
boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: 12 Всего: 35 |
Я делал тест на Windows 2K.
И как я уже писал, такой проблемы не возникло. -------------------- Никогда не говори никогда |
|||
|
||||
cardinal |
|
||||||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
Понял. Не исключаю, что на Windows 2K такой проблемы вообще не появляется. Ладно вот как я сделал:
В модуль:
p.s. если написать
то в файл запишется 0x0d, 0x0a. Если написать Position, то вроде все должно тоже функционировать. Мне сейчас уже просто некогда проверять. Если есть предложения как улучшить, то давайте, а потом засуну в FAQ. -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||||||
|
|||||||||
bom |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 329 Регистрация: 22.2.2004 Где: Казахстан, Алматы Репутация: 4 Всего: 6 |
cardinal , не понятно, зачем переводить всю кодовую таблицу в двоичные значения, а не использовать десятичные как в моем примере?
Ну ладно, если очень хочется, то можно ![]() Есть предложение по улучшению этого варианта:
В модуль:
Нет необходимости отдельно обрабатывать пробелы, ты уже назначил им значение &H20. Нет необходимости так же в проверке If InitStatus = False, InitStatus будет всегда False, так как массив CodeTab - локальный, значит и функцию PutRInit делаем Private. |
||||
|
|||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
cardinal
1) Попробуй посмотреть свою абракадабру в блокноте со шрифтом "Terminal" 2) Вместо извращений с самостоятельным перекодированием строки лучше воспользоваться стандартными API-функциями CharToOEM и OEMToChar -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
cardinal |
|
||||||||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
Ну я в принципе предполагал, что есть для этого какая нибудь API ![]()
Ну меня больше Norton Commander интересовал...
Это правильно.
При первом запуске PutR да, а потом нет.
А я их помоему и не обрабатываю отдельно ![]() -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||||||||
|
|||||||||||
bom |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 329 Регистрация: 22.2.2004 Где: Казахстан, Алматы Репутация: 4 Всего: 6 |
![]()
|
||||||
|
|||||||
cardinal |
|
||||||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
Не
а
![]()
Да, только у того кто пользуется функцией в одном модуле ИМХО меньше головной боли.
Кстати если их использовать, то не будет возможности сделать например табличку... ![]() -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||||||
|
|||||||||
bom |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 329 Регистрация: 22.2.2004 Где: Казахстан, Алматы Репутация: 4 Всего: 6 |
ОК, понял. Больше не буду ![]() |
|||
|
||||
Эд |
|
|||
Unregistered |
Добрый день, уважаемый
cardinal! Как я понял, задача заключается в следующем. В режиме BIN коды пишутся в файл "как есть" без всякого преобразования. Но под Win весь текст представлен в кодировке 1251, которая, разумеется, в Нортоне читаться не может. Если проге не требуется писать в файл строк, вводимых непосредственно с клавиатуры, можно сделать проще: все текстовые сообщения для записи в файл, предварительно создать при помощи того же NC, а затем вставить в исходник. (Или перекодировать для исходника в DOS-формат любым другим способом: использовав FAR, "Штирлиц", или, просто, на худой конец, Word). Если требуется записывать в файл строки, вводимые под Win с клавиатуры или других устройств, без перекодировки не обойтись. Способ, котрым Вы воспользовались, хорош, но это общий случай для произвольной перекодировки. Объем можно значительно сократить, если учесть некоторые особенности взаимного расположения русских символов в кодировках Win1251 и DOS. У меня, например, давно работает такая перекодировка: Код A=ASC(A$) SELECT CASE A CASE &h85: B$="_" CASE &h97: B$="-" CASE &hA8: B$="р" 'р(rus) = Ё (dos) CASE &hB8: B$="с" 'с(rus) = ё (dos) CASE &hAB, &hBB: B$=CHR$(34) CASE &hC0 TO &hEF: B$=CHR$(A-&h40) CASE &hF0 TO &hFF: B$=CHR$(A-&h10) CASE ELSE: B$=A$ END SELECT Этот фрагмент перекодирует одиночный символ A$ в B$ из WIN1251 в DOS (RUS-"ALT"). Целую строку следует перекодировать посимвольно, составив цикл. Существует и обратная перекодировка DOS - WIN, она чуть-чуть сложнее: Код A=ASC(A$) SELECT CASE A CASE &hE0 TO &hEF: B$=CHR$(A+&h10) CASE &h80 TO &hB0: B$=CHR$(A+&h40) CASE &hF0: B$=CHR$(&hA8) CASE &hF1: B$=CHR$(&hB8) CASE &hF0 TO &hFF: B$=CHR$(A-&h40) CASE &hB3: B$=CHR$(&hA6) CASE &hC4: B$=CHR$(&h97) CASE &hC5: B$=CHR$(&h86) CASE &hB0 TO &hDF: B$=CHR$(A-&h30) CASE ELSE: B$=A$ END SELECT Напоминаю еще раз, что оба фрагмента реализуют частный случай соотношения наборов WIN и DOS. Для общего случая перекодировок подобный метод может оказаться довольно малоэффективным. Всем пожелания успехов, Эд |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Ну уж коли на то пошло, еще более разумно держать в виде файлов набор XLAT-таблиц перекодировки (по 256 байт каждая, в строковую переменную считывается и используется). И не забывать учитывать, что иной раз в одной codepage символ есть, а в другой такого нет....
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
cardinal |
|
||||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
Ну, идея была в принципе сделать так, что без разницы с клавиатуры или нет. Соответственно предварительно ничего создать нельзя.
Так оно и есть. Эд, то что ты написал это интересно (особенно перекодировка DOS - WIN). О первом варианте (перекодировка WIN - DOS), я честно говоря задумывался, но вопрос, что лучше вытаскивать из таблицы готовое значение или прыгать по Case'aм, а потом вычитать или еще чего. Я пришел к выводу, что разницы никакой. Преимущества таблицы заключаются наверное все таки в более быстром решении задачи, а вариант "Case" наверно лучше тем, что не надо парить голову таблицей и занимать ей память.
Что такое XLAT таблица? -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "VB6" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB6 | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |