Yoko

All sides of Injection
It is currently 2025-12-03 01:01:26

All times are UTC+02:00




Post new topic  Reply to topic  [ 12 posts ] 
Author Message
PostPosted: 2006-12-05 06:00:58 
Offline
User avatar

Joined: 2006-11-06 21:45:23
Posts: 137
Code:
##########################################################################
# (c) Edred                                                              #
# Возвращает слово из строки str за номером num, если такого слова нет - #
# возвращаем ''                                                          #
# Разделителем слов считаем пробел. Несколько пробелов подряд считаются  #
# за один.                                                               #
# Функция сделана без рекурсии специально для считывания слов из         #
# сверхдлинных строк!                                                    #
# GAUHAR:                                                                #
# Сделал небольшие изменения. Теперь разделитем слов является не только  #
# пробел, но и знаки пунктуации: запятая, двоеточие, точка с запятой,    #
# точка,  восклицательный знак, вопросительный знак.                     #
# Два подряд идущих разделителя считаются за один.                       #
# Заменил выражение dlin-1 на len(st), а переменную dlin удалил. Почему  #
# я это сделал: не знаю почему, но если строка заканчивается словом без  #
# знака пунктуаци (например: точки), то функция почему-то возвращала     #
# последнее слово без последней буквы, а так работает все нормально.     #
#------------------------------------------------------------------------#
SUB GetWord(st,nom )
   VAR tmpst, i, kol = 0, start = 0
   For i=0 To len(st)
      If mid(st,i,1)==' ' OR mid(st,i,1)==',' OR mid(st,i,1)==':' OR mid(st,i,1)==';' OR mid(st,i,1)=='.' or mid(st,i,1)=='!' or mid(st,i,1)=='?' OR i==len(st) Then
         kol = kol + 1
         If kol==nom Then
            ; это первый разделитель после нужного нам слова
            tmpst = mid( st, start, i - start )
            return tmpst
          Else
            While mid(st,i,1)==' ' or mid(st,i,1)==',' or mid(st,i,1)==':' or mid(st,i,1)==';' OR mid(st,i,1)=='.' or mid(st,i,1)=='!' or mid(st,i,1)=='?'
               i = i + 1
            Wend
            If kol==nom - 1 Then
               start = i
            Endif
         Endif
      Endif
   Next
   tmpst = ''
   return tmpst
endsub
#------------------------------------------------------------------------#
##########################################################################


Last edited by GAUHAR on 2006-12-05 07:34:26, edited 1 time in total.

Top
   
 Post subject:
PostPosted: 2006-12-05 07:27:35 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Ога, а теперь сделай так, чтобы то, что в кавычках было одним словом -)


Top
   
 Post subject:
PostPosted: 2006-12-05 07:35:37 
Offline
User avatar

Joined: 2006-11-06 21:45:23
Posts: 137
Destruction wrote:
Ога, а теперь сделай так, чтобы то, что в кавычках было одним словом -)

А твои функции Des.String.GetWord(string, num) и Des.String.GetWordsCount(string) на что )))


Top
   
 Post subject:
PostPosted: 2006-12-05 08:00:37 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
GAUHAR wrote:
Destruction wrote:
Ога, а теперь сделай так, чтобы то, что в кавычках было одним словом -)

А твои функции Des.String.GetWord(string, num) и Des.String.GetWordsCount(string) на что )))

На всякий случай.


Top
   
 Post subject:
PostPosted: 2006-12-05 08:02:06 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
У тебя строчка слишком длинная - посмотри в сторону int inArray( string, array, bool, int ) -)


Top
   
PostPosted: 2006-12-05 10:15:19 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
GAUHAR wrote:
...


За что прощать-то? Молодец!

Я, правда, этой функцией давно не пользуюсь... Предпочитаю:
Code:
Copy(s,1,Pos(' ',s)-1)


:lol:

_________________
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...


Top
   
 Post subject:
PostPosted: 2006-12-05 11:56:52 
Offline
User avatar

Joined: 2006-11-06 21:45:23
Posts: 137
Еще одна редакция:
Code:
##################################################################
# (c) Edred                                                      #
# Edition: GAUHAR                                                #
# Возвращает слово из строки str за номером num, если такого     #
# слова нет - возвращаем ''                                      #
# Разделителем слов считаем пробел и знаки пунктуации. Несколько #
# разделителей подряд считаются за один.                         #
# Примечание: работает чуть медленней, чей оригинальная функция, #
# но в ней легко можно добавить или удалить разделители.         #
#----------------------------------------------------------------#
SUB GetWord(st,nom)
   VAR tmpst, i, kol = 0, start = 0
   VAR j, m, LastIndexArray = 12
   DIM delimiter[13]
      delimiter[0]  = ' '
      delimiter[1]  = ','
      delimiter[2]  = ':'
      delimiter[3]  = ';'
      delimiter[4]  = '.'
      delimiter[5]  = '!'
      delimiter[6]  = '?'
      delimiter[7]  = '"'
      delimiter[8]  = '('
      delimiter[9]  = ')'
      delimiter[10] = '['
      delimiter[11] = ']'
      delimiter[12] = '*'
   for i=0 to len(st)
      for j=0 to LastIndexArray
         if mid(st,i,1)==delimiter[j] or i==len(st) then
            kol = kol + 1
            if kol==nom then
               ; это первый разделитель после нужного нам слова
               tmpst = mid( st, start, i - start )
               return tmpst
             else
               for m = 0 to LastIndexArray
                  while mid(st,i,1)==delimiter[m]
                     i = i + 1
                     m = 0
                  wend
               next
               if kol==nom - 1 then
                  start = i
               endif
            endif
         endif
      next
   next
   tmpst = ''
   return tmpst
endsub
#----------------------------------------------------------------#
##################################################################


Top
   
PostPosted: 2006-12-05 12:00:17 
Offline
User avatar

Joined: 2006-11-06 21:45:23
Posts: 137
Edred wrote:
Я, правда, этой функцией давно не пользуюсь... Предпочитаю:
Code:
Copy(s,1,Pos(' ',s)-1)


:lol:


Я такой не знаю. (((


Top
   
PostPosted: 2006-12-05 13:19:54 
Offline

Joined: 2005-08-19 16:12:23
Posts: 182
GAUHAR wrote:
Edred wrote:

Code:
Copy(s,1,Pos(' ',s)-1)


:lol:

Я такой не знаю. (((

Это не с Инжекта :D


Top
   
 Post subject:
PostPosted: 2006-12-05 23:30:23 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
viewtopic.php?t=7379

Сюда скинь свою функцию, чтобы народу была доступна...

_________________
Ни один скрипт не работает? Пора обновить Инжект...

Все работает, но хочется большего? Пора переходить на стелс...


Top
   
 Post subject:
PostPosted: 2006-12-06 09:01:45 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Code:
var delimeter = ' ,!.'
uo.print( delimeter[ n ] )


Такой код только у меня работает?.. В любом случае, если забить эту информацию в строковую переменную - можно будет убрать 1 переменную и сократить код.


Top
   
 Post subject:
PostPosted: 2006-12-06 15:36:30 
Offline
User avatar

Joined: 2006-11-06 21:45:23
Posts: 137
Destruction wrote:
Code:
var delimeter = ' ,!.'
uo.print( delimeter[ n ] )


Такой код только у меня работает?.. В любом случае, если забить эту информацию в строковую переменную - можно будет убрать 1 переменную и сократить код.


Destruction спасибо за подсказку, я просто не знал (или забыл), что со строкой можно работать как с массивом символов.
Переделал предыдущий скрипт как ты сказал. Вот что получилось.
И еще я только сейчас узнал синтаксис функции int inArray( string, array, bool, int ), буду пробовать. Да и еще в доках указано isArray, как будет правильней?

Code:
##################################################################
# (c) Edred                                                      #
# Edition: GAUHAR                                                #
# Возвращает слово из строки str за номером num, если такого     #
# слова нет - возвращаем ''                                      #
# Разделителем слов считаем пробел и знаки пунктуации. Несколько #
# разделителей подряд считаются за один.                         #
# Примечание: работает чуть медленней, чем оригинальная функция, #
# но в ней легко можно добавить или удалить разделители.         #
#----------------------------------------------------------------#
SUB GetWord(st,nom)
   VAR tmpst, i, kol = 0, start = 0
   VAR j, m, delimiters = ' ,:;.!?"()[]*'
   for i=0 to len(st)
      for j=0 to len(delimiters) - 1
         if mid(st,i,1)==delimiters[j] or i==len(st) then
            kol = kol + 1
            if kol==nom then
               ; это первый разделитель после нужного нам слова
               tmpst = mid( st, start, i - start )
               return tmpst
             else
               for m = 0 to len(delimiters) - 1
                  while mid(st,i,1)==delimiters[m]
                     i = i + 1
                     m = 0
                  wend
               next
               if kol==nom - 1 then
                  start = i
               endif
            endif
         endif
      next
   next
   tmpst = ''
   return tmpst
endsub
#----------------------------------------------------------------#
##################################################################


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 12 posts ] 

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 7 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited