purebasic.info

PureBasic forum
Текущее время: Вт апр 24, 2018 12:16 am

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Процедура программного Backspace
СообщениеДобавлено: Вт июн 10, 2014 9:16 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 567
Благодарил (а): 2 раз.
Поблагодарили: 31 раз.
Пункты репутации: 9
Может кому нужно будет?
Удалить последний символ в строке Юникод(utf-16)
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
Global h.s="0123456789"
;(©) Автор под псевдонимом Сергейчик.
Procedure Backspace(*s)
!mov edi,[p.p_s]
!hu:
!cmp word [edi],0h
!Jz rr
!add edi,4
!CMP word [edi-2],0h
!Jnz hu
!sub edi,2
!rr:
!mov word[edi-2],0h
EndProcedure
 
MessageRequester("", "Начало теста"  )
   time = GetTickCount_()
   For q=0 To 4
   Backspace(@h)
 Next
 Debug h
  t.d = (GetTickCount_() - time)/1000
   MessageRequester("", "Количество  циклов=" + q + #CR$ + "Время теста= " + t)



Последний раз редактировалось Сергейчик Чт окт 19, 2017 1:45 am, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Процедура программного Backspace
СообщениеДобавлено: Вт июл 15, 2014 12:23 am 
Не в сети
лентяй ужасный
Аватар пользователя

Зарегистрирован: Вс фев 27, 2011 4:23 pm
Сообщений: 646
Благодарил (а): 4 раз.
Поблагодарили: 5 раз.
Хмм, кто нибудь проверяет эти коды.

Что будет если запустить процедуру один раз, без циклов?
Backspace(@h): Debug h

Вот аналог (не могу назвать полным, так как эта работает правильно, кхе-кхе) который написан на родном, могучем, а по скорости всего на 4% уступает (если считать сверху-вниз)

Код:
1
2
3
Procedure Backspace(*s)
  PokeB(*s+MemoryStringLength(*s)-1,0)
EndProcedure



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Процедура программного Backspace
СообщениеДобавлено: Вт июл 15, 2014 8:19 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11108
Благодарил (а): 4 раз.
Поблагодарили: 395 раз.
newww писал(а):
Хмм, кто нибудь проверяет эти коды.
Да код работает.

newww писал(а):
Вот аналог (не могу назвать полным, так как эта работает правильно, кхе-кхе)
Этот не удаляет последний символ.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Процедура программного Backspace
СообщениеДобавлено: Вт июл 15, 2014 10:24 am 
Не в сети
лентяй ужасный
Аватар пользователя

Зарегистрирован: Вс фев 27, 2011 4:23 pm
Сообщений: 646
Благодарил (а): 4 раз.
Поблагодарили: 5 раз.
Пётр писал(а):
Да код работает.

У меня она удаляет по два символа, реже по одному (иногда вообще ни одной :? ).
Преверил вроде и на 32-, и на 64-битной машине

Пётр писал(а):
Этот не удаляет последний символ.

А какой она интересно удаляет?


Вложения:
Untitled.png [59.1 KiB]
Скачиваний: 0
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Процедура программного Backspace
СообщениеДобавлено: Вт июл 15, 2014 10:55 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11108
Благодарил (а): 4 раз.
Поблагодарили: 395 раз.
По моему ясно написано.
Сергейчик писал(а):
Удалить последний символ в строке Юникод(utf-16)
Компилировать нужно с поддержкой юникода.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Процедура программного Backspace
СообщениеДобавлено: Вт июл 15, 2014 11:06 am 
Не в сети
лентяй ужасный
Аватар пользователя

Зарегистрирован: Вс фев 27, 2011 4:23 pm
Сообщений: 646
Благодарил (а): 4 раз.
Поблагодарили: 5 раз.
Ееее, ну все тогда, проглядел :shock:
Будь добр, почисть тогда оффтопик


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Процедура программного Backspace
СообщениеДобавлено: Вс сен 21, 2014 12:36 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 567
Благодарил (а): 2 раз.
Поблагодарили: 31 раз.
Пункты репутации: 9
Вот еще процедурка может кому сгодится. :roll:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
;(©) Автор под псевдонимом Сергейчик.
Procedure backspace_Left(*s);стереть 1 символ
!mov dword edi,[p.p_s]
!cmp word [edi],0h
!Jz rrths
!hukg:
!add dword edi,2
!CMP word [edi],0h
!Jz ghg
!mov word ax,[edi]
!mov word [edi-2],ax
!Jmp hukg
!ghg:
!mov word ax,[edi]
!mov word [edi-2],ax
!rrths:
EndProcedure



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

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


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

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


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

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