Yoko

All sides of Injection
It is currently 2025-10-15 14:06:18

All times are UTC+02:00




Post new topic  Reply to topic  [ 34 posts ]  Go to page Previous 1 2
Author Message
 Post subject:
PostPosted: 2006-03-16 08:38:22 
Offline

Joined: 2006-02-03 06:53:36
Posts: 64
Destruction wrote:
Code:
if (30<x) and (x<40)

Не вижу логики, будет верно если x < 30, зачем тогда двойное условие? Возможно имелось в виду так:
Code:
if (30>x) and (x<40)


30<x == x>30
x<40 == x<40 => x> 30 and x<40


Top
   
 Post subject:
PostPosted: 2006-03-16 09:12:03 
Offline

Joined: 2006-02-07 15:26:45
Posts: 24
Вы на условие не сматрите это для примера!

Просто мне нужно знать если способ просто упрастить конструкцию.

Я просто подозреваю, что скорость работы этого скрипта будет давольно не быстрая!


Top
   
 Post subject:
PostPosted: 2006-03-16 10:06:28 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
CRazych wrote:
Вы на условие не сматрите это для примера!

Просто мне нужно знать если способ просто упрастить конструкцию.

Я просто подозреваю, что скорость работы этого скрипта будет давольно не быстрая!

Условия обрабатываются достаточно быстро.

Сократить можно - загнать всяку нечисть в массив и пустить циклом.


Top
   
 Post subject:
PostPosted: 2006-03-17 01:30:31 
Offline

Joined: 2006-02-07 15:26:45
Posts: 24
Чо то у мен мазгов нехватает.
Помагите плиз логикой. Как обработать строку
"coordinates 71o 53' S 83o 15' E"

Нужно вытащить координыты.
Просблема в том что они плавают тоесь нельзя просто указывать номер символа в строке.
Допустим следущая строка.
"location 171o 53' S 183o 15' E"

Ктонить может подсказать?


Top
   
 Post subject:
PostPosted: 2006-03-17 10:38:58 
Offline
Expert!
User avatar

Joined: 2005-05-04 14:05:19
Posts: 2580
Location: Москва
ну и что чт оплавает?
Вырезаешь статическую часть "location "
дальше на чинаешь в строчке искать пробелы, выризать МИДом

А вообще была такая хорошая функция scanint описание ее правда так и не попадалось на глаза;)


Top
   
 Post subject:
PostPosted: 2006-03-17 15:10:21 
Offline

Joined: 2006-02-07 15:26:45
Posts: 24
Как это понять вырезаешь?
Каким образом? (пример приведи)


Top
   
 Post subject:
PostPosted: 2006-03-17 22:31:15 
Offline
Expert!
User avatar

Joined: 2005-05-04 14:05:19
Posts: 2580
Location: Москва
CRazych wrote:
всё уже разобрался всё проще некуда )


Есть куча команд для работы со строчками... основные для тебя тут будет Left(str, n) Right(str, n) Mid(str, p, n)
первая возврашает подстроку на чиная с левого края длинной Н
Вторая тоже самая только справа...
третья возврашает подстрокку на чиная с позиции П и длиной Н


Top
   
 Post subject:
PostPosted: 2006-03-17 23:28:17 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
CRazych wrote:
Как это понять вырезаешь?
Каким образом? (пример приведи)


Вот тебе удобная для таких случаев функция:

Code:
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


Top
   
 Post subject:
PostPosted: 2006-03-18 00:06:20 
Offline

Joined: 2006-02-07 15:26:45
Posts: 24
Для нюба можно каждую строку с коминтарием?
Я просто ниразу в сваей жизне не использвал такого рода операторы.


Top
   
 Post subject:
PostPosted: 2006-03-18 00:13:55 
Offline
Expert!
User avatar

Joined: 2005-05-04 14:05:19
Posts: 2580
Location: Москва
чего тут не понятного? вот ты как определяешь зрительно что в строчке есть слова? правельно буковки и пустоты... так вот у этой пустоты есть имя... "ПРОБЕЛ" как не страно но у пустоты есть номер...
так вот что бы делить строчки достаточно искать эти пустоты... и найдя определять границы...
Самы простой алгоритм это с 2-мя переменными посиции начала и конца (начало_слова, конец_слова (числовые переменные)).

для простоты можно в конец строки добавить пробел...
изначально:
строка = строка + пробел
начало_слова = 0
конец_слова = 0
ищем пробел
нашли (текущая_позиция)
начало_слова = конец_слова
конец_слова = текущая_позиция

после первого прохода мы уже можем выделить первое слово...
и так далее...


Top
   
 Post subject:
PostPosted: 2006-03-18 02:14:37 
Offline

Joined: 2006-02-07 15:26:45
Posts: 24
Давай по примерам, что б я доконца разобрался.
Допустим есть переменная num=abc1 abc2 abc3

Задание вывести в отдельную переменную "z" abc2

Code:
sub main()
var num,z
num=abc1 abc2 abc3
нужно продолжить код дальше


Первые вопросы:
Что делают функции len( ) mid( )



Я сильно извеняюсь за глыпые вопросы, но больше мне их задать негде.

И надеюсь с вашей помащью у меня ченить получится.
Заранее спасибо!


Top
   
 Post subject:
PostPosted: 2006-03-18 11:51:32 
Offline
Expert!
User avatar

Joined: 2005-05-04 14:05:19
Posts: 2580
Location: Москва
Исходное:
строка = 'abc1 abc2 abc3'
номер_слова = 3 (номер слова, которое нам надо выделить из строки)
z = 0

Как искать пробел?
в инжекте строки это массив символов, по этому кним можно обращаться как к масиву.
строках[0] = 'a' строка[1] = 'b'
Следовательно достаточно обращатся к элементам массива, что бы найти пробел.

дальше найдя пробел надо обновить указатели на чалиа и конца слова. сна хождением нового пробела конец предшествующего слова становится на чалом следующего, по этому и происходит обмен у казателей (следует только соблюдать правельный порядок обмена).

Code:
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))


Top
   
 Post subject:
PostPosted: 2006-03-18 14:50:28 
Offline

Joined: 2006-02-07 15:26:45
Posts: 24
<> что это означает?


Top
   
 Post subject:
PostPosted: 2006-03-18 16:46:29 
Offline
Expert!
User avatar

Joined: 2006-02-07 08:51:40
Posts: 1348
Location: г. Старый Оскол
CRazych wrote:
<> что это означает?


<> - означает "не равно"


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 34 posts ]  Go to page Previous 1 2

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 1 guest


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:  
Powered by phpBB® Forum Software © phpBB Limited