Page 1 of 2

Сравнение переменной... (даже не знаю как это назвать)

Posted: 2009-01-09 20:04:06
by ADEPT_ABP
Имеется строка:

Code: Select all

if uo.getgraphic('finditem')=='0x0EED' || uo.getgraphic('finditem')=='0x13B5' then

Можно ли сделать на подобии:

Code: Select all

if uo.injournal("You put|You can't") then

Короче как минимумом строк сделать проверку ненужных/нужных типов? Я что-то не могу понять... и найти тоже не могу... :(

Posted: 2009-01-09 20:44:38
by Millerbeer
а не проще сразу искать нужные типы, забитые в таблицу?

Posted: 2009-01-09 21:00:57
by ADEPT_ABP
Проще, но меня интересует именно это. :wink:

Posted: 2009-01-10 08:07:54
by Grin

Code: Select all

sub main()
   #uo.Print(uo.GetGraphic("self"))
   uo.Print(str(TypeIn("0x0191|0x0191|0x0191|0x0191|0x0190|0x0191|0x0190|0x0191", uo.GetGraphic("self"))))
end sub

sub TypeIn(types, type)

   var types_size = int((len(types)+1)/7)
   var index = 0

   while types_size
      if mid(types, index*7, 6) == type then
         return index
      end if
      index = index+1
      types_size = types_size-1
   wend
   return -1

end sub

Posted: 2009-01-10 09:15:41
by ADEPT_ABP
Значит только так? Эх. Но всё равно Grin спасибо. :)

Posted: 2009-01-10 10:00:18
by ADEPT_ABP
Grin, ты подтолкнул на мысль.

Code: Select all

sub main()
var z=uo.getgraphic('self')

if types(z)==true then
uo.print('Совпадает')
else
uo.print('Не совпадает')
endif

end sub

Sub types(type)
var a

dim t[2]
t[0]='0x0191'
t[1]='0x0190'

for a=0 to 1
if type==t[a] then
return true
endif
next
end sub

Posted: 2009-01-10 10:29:27
by Savage
Первоначальная конструкция проще с точки зрения машинного языка. Мощь проца некуда девать? :lol:

Posted: 2009-01-10 10:33:45
by ADEPT_ABP
Ага... понятно. Я конечно не в курсе чем сложнее мой вариант для машины, но думаю 2-х ядер проца на ето хватит. :)

Posted: 2009-01-10 10:38:28
by Savage
Владислав Пирогов "ASSEMBLER для WINDOWS" 4-е издание. Очень рекомендую. Хорошая книжка, читается легко, примеры наглядные и интересные. Вообщем вправит мозг в нужном направлении в области программирования.

Posted: 2009-01-10 10:50:17
by ADEPT_ABP
Я конечно понимаю учиться никогда не поздно, есть одно но, в школе у меня отбили желание учиться. Теперь я учебную литературу не воспринимаю как полезную информацию, голова и так почти постоянно болит. Но я всё же попытаюсь хотя бы найти и скачать(покупать не на что), может быть даже почитаю. :D
P.S. Кстати что такое

Code: Select all

int(len(...))

Posted: 2009-01-10 10:59:40
by Savage
целая часть числа(длина())

Posted: 2009-01-10 11:37:17
by ADEPT_ABP
... я так понимаю

Code: Select all

int((len(types)+1)/7) 

это

Code: Select all

int(56/7)

то есть

Code: Select all

int(8)

Целая часть числа 8 что ли? Как-то сложно для понимания...

Posted: 2009-01-10 12:19:48
by Savage
Ну да. Наверное можно её убрать.

Posted: 2009-01-10 14:59:18
by admir
Грин как всегда виртуоз!!!
Смотрю на код и восхищаюсь :)

я бы сделал через массивы, Но часто для работы со списком пользуюсь функцией едреда, слегка переделанной для себя.

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


Но у грина проще!!
Можно добавить 1 переменную характеризующую длину элемента.
А можно в приниципе разделить для типа и для ИД.

Posted: 2009-01-10 16:21:13
by Grin
Целая часть берется для "защиты от дурака", если формат строки не правильно соблюден.

Поповоду мощи компа... если уж лишняя сотня операторов будут "грузить" проц, то переходим на Дос:)

Не надо из крайности в крайность кидатся... Классы тоже не для экономии процессорных ресурсов сделаны.

Posted: 2009-01-10 18:43:32
by ADEPT_ABP
Grin wrote:Не надо из крайности в крайность кидатся... Классы тоже не для экономии процессорных ресурсов сделаны.

А можно узнать из какой крайности в какую, и кто, кидается? И что за классы? :D А то я не понял ничего... :cry:

Posted: 2009-01-10 19:40:21
by Grin
:) По ассемблеру Юров норм:)

Posted: 2009-01-10 23:14:32
by ADEPT_ABP
Знаете, вся ошибка тех, кто рекомендует какую-нибудь литературу, это - начальный опыт/знание яз.прогр. перед прочтением той или иной литературы. Я не имею никаких знаний о яз.программирования, поэтому многие слова/термины для меня пустой звук. Пример(Пирогов Владислав Юрьевич.
Ассемблер для Windows. — М.: Издатель Молгачева С.В., 2002. —552 с., ил.):
Часть I. Основы 32-битного программирования в Windows
Глава 1. Средства программирования в Windows
I

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

Прежде всего замечу, что в названии главы есть некоторая натяжка, т.к. технологии трансляции и в MS DOS, и в Windows весьма схожи. Однако программирование в MS DOS уходит в прошлое.

Двум стадиям трансляции соответствуют две основные программы: ассемблер ML.EXE и редактор связей LINK.EXE 7 (или TASM32.EXE и TLINK32.EXE в Турбо Ассемблере).

Пусть файл с текстом программы на языке ассемблера называется PROG.ASM, тогда, не вдаваясь в подробный анализ, две стадии трансляции будут выглядеть следующим образом: c:\masm32\bin\ml /c /coff PROG.ASM - в результате появляется модуль PROG.OBJ, а также c:\masm32\bin\link /SUBSYSTEM:WINDOWS PROG.OBJ - в результате появляется исполняемый модуль PROG.EXE. Как Вы, я надеюсь, догадались ( :) Я долго ржал - вообще непонял о чём это?) /с и /coff являются параметрами программы ML.EXE, a /SUBSYSTEM:WINDOWS является параметром для программы LINK.EXE. О других ключах этих программ более подробно см. Гл. 1.5.

На данном примере, что вы посоветуете прочитать перед подобной литературой?

Posted: 2009-01-11 00:06:53
by Grin
тебе дали 2-х авторов.
Теперь надо обучить как книги выбирать?:) а потом как их читать и тд?:)

Хватит морозить... да и нах тебе ассемблер сдался?

Posted: 2009-01-11 09:32:38
by Savage
Вообще никогда не думал о помеченном красным. :D Просто запускаешь батник:

Code: Select all

@echo off
f:\masm32\bin\ml /coff /c %1.asm
f:\masm32\bin\link /SUBSYSTEM:CONSOLE %1.obj
@echo on

название_батника имя_программы_без_расширения
например: m test
это и есть технология трансляции и редактор связей.