|
Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново... |
21.06.2007, 21:58
|
#1
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Нарезка большой строки по разделителю (перенос по словам))
[blitz]
Data "'В теме (ссылка) было удалено мое сообщение, следующее за сообщением номер ##. Я же "
Data "считаю, что мое сообщение было конкретным ответом по теме, и модератор не имел "
Data "оснований для его удаления, ибо сообщение не противоречило ни одному из правил "
Data "форума.' Если Ваш вопрос будет похож на пример 1, то не ждите, что на него ответят. В "
Data "вопросе должна ОБЯЗАТЕЛЬНО присутствовать ссылка на тему с проблемой. "
Data "Абстрактные проблемы типа: 'ну что-то у вас модеры совсем разбаловались, чистят все "
Data "подряд.' рассматриваться НЕ будут. НЕ стоит в качестве мотивации своей правоты "
Data "приводить случаи с другими пользователями или намекать на какие-либо другие "
Data "проблемы. Ибо речь идет не о тех проблемах, и описание других проблем будет флудом, "
Data "который просто-напросто удалят."
;===========================
;формирование строки
Local InputString$=""
temp$=""
For i=1 To 10
Read temp
InputString$=InputString$+temp
Next
DebugLog InputString$
;============================
Local SEPARATOR$=" ";<= разделитель
Local MAXLEN%=40;<= длина нарезки
LNINSTR%=Len(InputString$)
Dim MAP$(LNINSTR%);<= ресивер
Local ST%=1
Local LINDX%=1
Local CINDX%=1
Local MapPtr%=0;<=индекс заполнения ресивера
While True
CINDX=Instr(InputString$,SEPARATOR$,LINDX)
If CINDX=0
CINDX=LNINSTR
If CINDX-ST>MAXLEN
MAP(MapPtr)=Mid(InputString$,ST,LINDX-ST-1)
MapPtr=MapPtr+1
ST=LINDX
EndIf
MAP(MapPtr)=Mid(InputString$,ST,CINDX-ST)
MapPtr=MapPtr+1
Exit
EndIf
If CINDX-ST>MAXLEN
MAP(MapPtr)=Mid(InputString$,ST,LINDX-ST-1)
MapPtr=MapPtr+1
ST=LINDX
EndIf
LINDX=CINDX+1
Wend
;======================
;вывод
DebugLog ""
For i=0 To MapPtr
DebugLog MAP(i)
Next
WaitKey()
End
[/blitz]
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
22.06.2007, 02:18
|
#2
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Нарезка большой строки по разделителю (перенос по словам))
[blitz]
Data "'В теме (ссылка) было удалено мое сообщение, следующее за сообщением номер ##. Я же "
Data "считаю, что мое сообщение было конкретным ответом по теме, и модератор не имел "
Data "оснований для его удаления, ибо сообщение не противоречило ни одному из правил "
Data "форума.' Если Ваш вопрос будет похож на пример 1, то не ждите, что на него ответят. В "
Data "вопросе должна ОБЯЗАТЕЛЬНО присутствовать ссылка на тему с проблемой. "
Data "Абстрактные проблемы типа: 'ну что-то у вас модеры совсем разбаловались, чистят все "
Data "подряд.' рассматриваться НЕ будут. НЕ стоит в качестве мотивации своей правоты "
Data "приводить случаи с другими пользователями или намекать на какие-либо другие "
Data "проблемы. Ибо речь идет не о тех проблемах, и описание других проблем будет флудом, "
Data "который просто-напросто удалят."
;===========================
Graphics 800,600,32,2
SetBuffer BackBuffer()
font=LoadFont("Arial cyr",20)
SetFont font
;формирование строки
Local InputString$=""
temp$=""
For i=1 To 10
Read temp
InputString$=InputString$+temp
Next
DebugLog InputString$
;============================
Local SEPARATOR$=" ";<= разделитель
Local MAXLENPIX%=400+FontWidth();<= длина нарезки
LNINSTR%=Len(InputString$)
Dim MAP$(LNINSTR%);<= ресивер
Local ST%=1
Local LINDX%=1
Local CINDX%=1
Local MapPtr%=0;<=индекс заполнения ресивера
While True
CINDX=Instr(InputString$,SEPARATOR$,LINDX)
If CINDX=0
CINDX=LNINSTR
temp=Mid(InputString$,ST,CINDX-ST-1)
If StringWidth(temp)>MAXLENPIX
MAP(MapPtr)=Mid(InputString$,ST,LINDX-ST-1)
MapPtr=MapPtr+1
ST=LINDX
EndIf
MAP(MapPtr)=Mid(InputString$,ST,CINDX-ST)
MapPtr=MapPtr+1
Exit
EndIf
temp=Mid(InputString$,ST,CINDX-ST-1)
If StringWidth(temp)>MAXLENPIX
MAP(MapPtr)=Mid(InputString$,ST,LINDX-ST-1)
MapPtr=MapPtr+1
ST=LINDX
EndIf
LINDX=CINDX+1
Wend
;======================
;вывод
Line MAXLENPIX,0,MAXLENPIX,GraphicsHeight()
For i=0 To MapPtr
Text 0,i*FontHeight(),MAP(i)
Next
Flip
WaitKey()
End
[/blitz]
ограничение в пикселях ( а не в байтах)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
22.06.2007, 02:19
|
#3
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Нарезка большой строки по разделителю (перенос по словам))
Варианты не особо шустрые - но дают представление о принципе
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
22.06.2007, 02:38
|
#4
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Нарезка большой строки по разделителю (перенос по словам))
интересный пример.
ЗЫ. Ну Импер, mod 1 заюзает для получения дробной части, DebugLog для вывода, респект вобщем.
|
(Offline)
|
|
25.12.2007, 16:40
|
#5
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Нарезка большой строки по разделителю (перенос по словам))
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:59.
|