Code: Select all
##########################################################################
# (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
#------------------------------------------------------------------------#
##########################################################################