purebasic.info

PureBasic forum
Текущее время: Пн дек 10, 2018 7:04 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Вариант преобразования текста
СообщениеДобавлено: Вс ноя 18, 2018 3:39 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 667
Благодарил (а): 2 раз.
Поблагодарили: 34 раз.
Пункты репутации: 9
Конвертируем текст ASCII из нижнего регистра(регистр заглавных букв) в верхний регистр(прописные)
до комментариев(;). :roll:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
Автрор под псевдонимом Сергейчик (c)
Procedure convertaziy_texta_vverhniy_registr(*text)
  !push edi
  !mov dword edi,[esp+8]
  !sub dword edi,2
  !vozvratt:
 !add dword edi,2
  ;
  !cmp word[edi],0h
   !jz netsimvolov_vstroke
   ;
  !cmp word [edi],5ah;
   !ja vozvratt
   ;
  !cmp word [edi],3bh;";"
   !jz komment
  !cmp word [edi],41h
  !jl vozvratt
  ;значит это символ конвертации
  !
  !add dword [edi],32
  !jmp vozvratt
  !komment:
 !add dword edi,2
   !cmp word[edi],0h
    !jz netsimvolov_vstroke
   !cmp word[edi],0dh;"$CR"
  !jnz komment
  !jmp vozvratt
  ;
  !netsimvolov_vstroke:
 !pop edi
  !retn 4
EndProcedure
 
Global s.s="FGHryy66FBJOAGJKZfhpu'.,.,phcsseAc....;ADVBNJITEKLJGO;"
convertaziy_texta_vverhniy_registr(@s)
Debug s
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Вариант преобразования текста
СообщениеДобавлено: Вс ноя 18, 2018 6:12 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 239
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
а можешь комментарии добавить? У меня в Linux не работает.
Комментарий типа: запускаем цикл прохода от адреса до Null, проверяем входит ли символ в диапазон, если да то добавляем к нему 26 (условно) и т.д.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Вариант преобразования текста
СообщениеДобавлено: Вс ноя 18, 2018 11:52 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 667
Благодарил (а): 2 раз.
Поблагодарили: 34 раз.
Пункты репутации: 9
AZJIO писал(а):
а можешь комментарии добавить? У меня в Linux не работает.
Комментарий типа: запускаем цикл прохода от адреса до Null, проверяем входит ли символ в диапазон, если да то добавляем к нему 26 (условно) и т.д.

В линуксе перенос строки вроде не CR а LF.
вот код конверта всех букв
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
;Автрор под псевдонимом Сергейчик (c)
Procedure convertaziy_texta_vverhniy_registr(*text)
  !push edi
  !mov dword edi,[esp+8]
  !sub dword edi,2
  !vozvratt:
 !add dword edi,2
  ;
  !cmp word[edi],0h
   !jz netsimvolov_vstroke
   ;
  !cmp word [edi],5ah;
   !ja vozvratt
   ;
  !cmp word [edi],41h
  !jl vozvratt
  ;значит это символ конвертации
  !add dword [edi],32
  !jmp vozvratt
  ;
  !netsimvolov_vstroke:
 !pop edi
  !retn 4
EndProcedure
 
Global s.s="FGHryy66FBJOAGJKZfhpu'.,.,phcsseAc....;ADVBNJITEKLJGO;"
convertaziy_texta_vverhniy_registr(@s)
Debug s
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Вариант преобразования текста
СообщениеДобавлено: Пн ноя 19, 2018 12:24 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 239
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Сергейчик писал(а):
В линуксе перенос строки вроде не CR а LF.
вот код конверта всех букв
выдаёт пока "[компилер] асемблер еррор"
а причём тут символ переноса?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Вариант преобразования текста
СообщениеДобавлено: Пн ноя 19, 2018 3:51 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 667
Благодарил (а): 2 раз.
Поблагодарили: 34 раз.
Пункты репутации: 9
AZJIO писал(а):
Сергейчик писал(а):
В линуксе перенос строки вроде не CR а LF.
вот код конверта всех букв
выдаёт пока "[компилер] асемблер еррор"
а причём тут символ переноса?

В линуксе вроде бы конец строки не как в винде CRLF(конец строки,возврат каретки). :roll:
PS:А компилятор пуриковский?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Вариант преобразования текста
СообщениеДобавлено: Пн ноя 19, 2018 6:14 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 708
Благодарил (а): 75 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
Сергейчик писал(а):
Конвертируем текст ASCII из нижнего регистра(регистр заглавных букв) в верхний регистр(прописные)

а может наоборот?
маленькие = прописные = нижний регистр = фывапр
большые = строчные = верхний регистр = ФЫВАПР

Сергейчик писал(а):
до комментариев(;). :roll:

ты строку обрабатываешь, а в строке допустимы все символы, тут только одна проверка на конец строки должна быть

Сергейчик писал(а):
В линуксе перенос строки вроде не CR а LF.

а ты разве не из памяти берёшь? все не символьные пропускаем, тогда многострочный текст автоматом пройдёт и пофиг все эти не символы


а код полезный, пригодиЦа


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Вариант преобразования текста
СообщениеДобавлено: Пн ноя 19, 2018 7:37 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6412
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
Загрузка и вставка оригинального текста "Война и Мир"
Изображение
Тот же текст преобразован перед вставкой в редактор при помощи встроенной UCase
Изображение
С LCase результат тот же, просто менее наглядно на скриншоте.
Как видно, встроенные функции UCase и LCase в реальных условиях работы на скорость программы практически не влияют.
Какой смысл тут применять ассемблерные вставки?

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Вариант преобразования текста
СообщениеДобавлено: Пн ноя 19, 2018 11:26 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 667
Благодарил (а): 2 раз.
Поблагодарили: 34 раз.
Пункты репутации: 9
kvitaliy писал(а):
Загрузка и вставка оригинального текста "Война и Мир"
Изображение
Тот же текст преобразован перед вставкой в редактор при помощи встроенной UCase
Изображение
С LCase результат тот же, просто менее наглядно на скриншоте.
Как видно, встроенные функции UCase и LCase в реальных условиях работы на скорость программы практически не влияют.
Какой смысл тут применять ассемблерные вставки?

Так это в памяти конвертируем и после LCase не конкатируем.
Переделал немного
PS:Забыл добавить что это для utf-16(начальные символы ascii)если чисто для ascii то нужно по единице смещать указатель.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
;Автрор под псевдонимом Сергейчик (c)
Procedure.i convertaziy_texta_vverhniy_registr(*text)
  !push edi
  !mov dword edi,[esp+8]
  !sub dword edi,2
  !vozvratt:
 !add dword edi,2
  ;
   !cmp word [edi],5ah;
   !ja vozvratt
   ;
   !cmp word[edi],0h
   !jz netsimvolov_vstroke
   !cmp word [edi],41h
   !jl vozvratt
  ;значит это символ конвертации
  !add dword [edi],32
  !ja vozvratt
  ;
  !netsimvolov_vstroke:
 !pop edi
  !retn 4
EndProcedure
 
Global s.s="FGHryy66FBJOAGJKZfhpu'.,.,phcsseAc....;ADVBNJITEKLJGO;"
convertaziy_texta_vverhniy_registr(@s)
Debug s
 


И для сравнения LCase тоже как то мало подходит типа она сначала конвертнёт текст а после его будет процедура сравнения сравнивать с образцом. :roll:


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB