Page 2 of 2
Posted: 2006-03-16 08:38:22
by CFA
Destruction wrote:Не вижу логики, будет верно если x < 30, зачем тогда двойное условие? Возможно имелось в виду так:
30<x == x>30
x<40 == x<40 => x> 30 and x<40
Posted: 2006-03-16 09:12:03
by CRazych
Вы на условие не сматрите это для примера!
Просто мне нужно знать если способ просто упрастить конструкцию.
Я просто подозреваю, что скорость работы этого скрипта будет давольно не быстрая!
Posted: 2006-03-16 10:06:28
by Destruction
CRazych wrote:Вы на условие не сматрите это для примера!
Просто мне нужно знать если способ просто упрастить конструкцию.
Я просто подозреваю, что скорость работы этого скрипта будет давольно не быстрая!
Условия обрабатываются достаточно быстро.
Сократить можно - загнать всяку нечисть в массив и пустить циклом.
Posted: 2006-03-17 01:30:31
by CRazych
Чо то у мен мазгов нехватает.
Помагите плиз логикой. Как обработать строку
"coordinates 71o 53' S 83o 15' E"
Нужно вытащить координыты.
Просблема в том что они плавают тоесь нельзя просто указывать номер символа в строке.
Допустим следущая строка.
"location 171o 53' S 183o 15' E"
Ктонить может подсказать?
Posted: 2006-03-17 10:38:58
by Grin
ну и что чт оплавает?
Вырезаешь статическую часть "location "
дальше на чинаешь в строчке искать пробелы, выризать МИДом
А вообще была такая хорошая функция scanint описание ее правда так и не попадалось на глаза;)
Posted: 2006-03-17 15:10:21
by CRazych
Как это понять вырезаешь?
Каким образом? (пример приведи)
Posted: 2006-03-17 22:31:15
by Grin
CRazych wrote:всё уже разобрался всё проще некуда )
Есть куча команд для работы со строчками... основные для тебя тут будет Left(str, n) Right(str, n) Mid(str, p, n)
первая возврашает подстроку на чиная с левого края длинной Н
Вторая тоже самая только справа...
третья возврашает подстрокку на чиная с позиции П и длиной Н
Posted: 2006-03-17 23:28:17
by Edred
CRazych wrote:Как это понять вырезаешь?
Каким образом? (пример приведи)
Вот тебе удобная для таких случаев функция:
Code: Select all
Sub GetWord( st, nom )
; (c) Edred
; Возвращает слово из строки str за номером num
; если такого слова нет - возвращаем ''
;
; Разделителем слов считаем пробел. Несколько пробелов подряд считаются за один.
; Функция сделана без рекурсии специально для считывания слов из сверхдлинных строк!
;
VAR tmpst, i, dlin, kol = 0, start = 0
dlin = len( st )
For i=0 To dlin - 1
If mid( st, i, 1 ) == ' ' OR i == dlin - 1 Then
kol = kol + 1
If kol == nom Then
; это первый пробел после нужного нам слова
tmpst = mid( st, start, i - start )
return tmpst
Else
While mid( st, i, 1 ) == ' '
i = i + 1
Wend
If kol == nom - 1 Then
start = i
Endif
Endif
Endif
Next
tmpst = ''
return tmpst
endsub
Posted: 2006-03-18 00:06:20
by CRazych
Для нюба можно каждую строку с коминтарием?
Я просто ниразу в сваей жизне не использвал такого рода операторы.
Posted: 2006-03-18 00:13:55
by Grin
чего тут не понятного? вот ты как определяешь зрительно что в строчке есть слова? правельно буковки и пустоты... так вот у этой пустоты есть имя... "ПРОБЕЛ" как не страно но у пустоты есть номер...
так вот что бы делить строчки достаточно искать эти пустоты... и найдя определять границы...
Самы простой алгоритм это с 2-мя переменными посиции начала и конца (начало_слова, конец_слова (числовые переменные)).
для простоты можно в конец строки добавить пробел...
изначально:
строка = строка + пробел
начало_слова = 0
конец_слова = 0
ищем пробел
нашли (текущая_позиция)
начало_слова = конец_слова
конец_слова = текущая_позиция
после первого прохода мы уже можем выделить первое слово...
и так далее...
Posted: 2006-03-18 02:14:37
by CRazych
Давай по примерам, что б я доконца разобрался.
Допустим есть переменная num=abc1 abc2 abc3
Задание вывести в отдельную переменную "z" abc2
Code: Select all
sub main()
var num,z
num=abc1 abc2 abc3
нужно продолжить код дальше
Первые вопросы:
Что делают функции len( ) mid( )
Я сильно извеняюсь за глыпые вопросы, но больше мне их задать негде.
И надеюсь с вашей помащью у меня ченить получится.
Заранее спасибо!
Posted: 2006-03-18 11:51:32
by Grin
Исходное:
строка = 'abc1 abc2 abc3'
номер_слова = 3 (номер слова, которое нам надо выделить из строки)
z = 0
Как искать пробел?
в инжекте строки это массив символов, по этому кним можно обращаться как к масиву.
строках[0] = 'a' строка[1] = 'b'
Следовательно достаточно обращатся к элементам массива, что бы найти пробел.
дальше найдя пробел надо обновить указатели на чалиа и конца слова. сна хождением нового пробела конец предшествующего слова становится на чалом следующего, по этому и происходит обмен у казателей (следует только соблюдать правельный порядок обмена).
Code: Select all
sub GetWord(строка, номер_слова)
var текущая_позиция = 0, начало_слова = 0, конец_слова = 0
строка = строка + ' '
while номер_слова <> 0
if строка[текущая_позиция] == ' ' then
номер_слова = номер_слова - 1
начало_слова = конец_слова
конец_слова = текущая_позиция
end if
текущая_позиция = текущая_позиция + 1
wend
return Mid(строка, начало_слова, конец_слова - начало_слова)
end sub
z=val(GetWord('abc1 abc2 abc3', 3))
Posted: 2006-03-18 14:50:28
by CRazych
<> что это означает?
Posted: 2006-03-18 16:46:29
by Kynep
CRazych wrote:<> что это означает?
<> - означает "не равно"