Что нового

Вопрос по Regex и Коллекциям/Массивам

masheen

Новичок
Сообщения
25
Репутация
0
Знатоки, подскажите команду AutoIt мне нужно например из текста "AXG"
увидеть только XG
код Regex мне не нужен, нужно всего лишь название команды в AutoIt
$text = Команда??? ($text, "(?<=A)XG")

И еще вопрос поддерживает ли AutoIt позитивный просмотр назад (?<=шаблон)
знаю что например Java не поддерживает.

И вопрос про коллекции или массивы какая команда чтобы я смогу записать в массив данные
1_Время, 1_Значение,1_Комментарий
2_Время, 2_Значение,2_Комментарий
3_Время, 3_Значение,3_Комментарий

Мне нужен трехмерный массив правильно? И как мне потом получить из него например первую строчку "1_Время, 1_Значение,1_Комментарий"?
$String = $Array [1][1][1] правильно?
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Re: Вопрос по Regex и Коллекциям

Код:
StringRegExp
StringRegExpReplace

просмотр назад поддерживает, массивы начинаются с 0.
 
Автор
M

masheen

Новичок
Сообщения
25
Репутация
0
Re: Вопрос по Regex и Коллекциям

sngr сказал(а):
Код:
StringRegExp
StringRegExpReplace

просмотр назад поддерживает, массивы начинаются с 0.

Код:
#include <MsgBoxConstants.au3>
$text = "sdfdsfsdf"
$text = StringRegExp ($text, "(?<=s)...")
MsgBox(0, "",$text)

В сообщение выдает 1 показывает что совпадение только одно? что я делаю не правильно?
ах да а еще вопрос как искать следующее значение например есть текст

1-2
1-3
1-4
1-5
1-6

Как написать например

Count matches (Regex)($Text, "1", "$loop')
loop($loop)
File.Get next match (Regex)($Text, "(?<=1)..", "$text")
Variable.Add to collection("Collection_name", "$text")
end
То есть он в тексте находит сколько есть единиц присутствует, в данном случае 5 устанавливает цикл на 5ть раз
и потом ищет 1 значение заносит его в коллекцию (массив) и переходит к следующему значению
и в итоге моя коллекция(масив)
Variable.Get from collection("Collection_name", "1", "$text") будет содержать "-2"
Variable.Get from collection("Collection_name", "2", "$text") будет содержать "-3"
Variable.Get from collection("Collection_name", "3", "$text") будет содержать "-4"
Variable.Get from collection("Collection_name", "4", "$text") будет содержать "-5"
Variable.Get from collection("Collection_name", "5", "$text") будет содержать "-6"

как тоже самое сделать на AutoIt ???

Код:
$iOffset = 1
While 1
    $aRes = StringRegExp($sText, '(?i)<tage>(.*?)</tage>', 1, $iOffset)
    If @error Then ExitLoop ; Выход из цикла если более не найдено
    $iOffset = @extended ; Сохраняет позицию, от которой начать следующий поиск
    ; Просмотр только одного элемента массива, так как в рег.выр. одна группа
    MsgBox(0, 'флаг=1', 'Найдено = ' & $aRes[0] & @LF & _
            'Позиция начала = ' & $iOffset - StringLen($aRes[0]) & @LF & _
            'Позиция конца = ' & $iOffset - 1) ; Позиции могут использоваться другими строковыми функциями
WEnd

таким образом?

а по массиву $String = $Array[0][0][0] ?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
masheen
Нажимаете на
Код:
StringRegExp
, попадаете в справку, читаете. В конце примеры.
masheen [?]
Нет,такой массив не получится, максимум двумерный.
 
Автор
M

masheen

Новичок
Сообщения
25
Репутация
0
inververs сказал(а):
masheen
Нажимаете на
Код:
StringRegExp
, попадаете в справку, читаете. В конце примеры.
masheen [?]
Нет,такой массив не получится, максимум двумерный.

Да посмотрел справку, с вопросами выше разобрался.

На этом форуме задают и глупее вопросы, но получают конкретные ответы. Парни, можете ответить конкретно уже про массивы
как мне записать в массив данные
$Time = 2
$Event = 2
$Comment = 2

$Time = $Time +1
$Event = $Event+1
$Comment = $Comment+1

ArrayNomber1 первой строчкой содержал 2,2,2
а второй строчкой содержал 3,3,3

и как мне потом прочитать первую строчку
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Вот по первому вопросу.
Код:
Local $text = '1-2' & @CRLF & '1-3' & @CRLF & '1-4' & @CRLF & '1-5' & @CRLF & '1-6'
Local $aReg = StringRegExp($text, '(?<=1)..', 3) ;Поиск регуляркой
If IsArray($aReg) Then ;если найдено, то будет массив
	MsgBox(0, 'Всего найдено', UBound($aReg))
	For $i = 0 To UBound($aReg) - 1 ;цикл по массиву
		MsgBox(0, 'Добавь это в коллекцию', $aReg[$i]); к элементам массива обращаться так: $aReg[индекс]
	Next
EndIf



Добавлено:
Сообщение автоматически объединено:

masheen [?]
ArrayNomber1 первой строчкой содержал 2,2,2 а второй строчкой содержал 3,3,3
Код:
Local $aaaa = ['2,2,2', '3,3,3'] ;Одномерный массив
MsgBox(0, 0, $aaaa[0]) ;Первая строка

Local $bbbb = [[2, 2, 2], [3, 3, 3]] ;двумерный массив
MsgBox(0, 0, $bbbb[0][0]) ;первая строка, первый элемент
 
Автор
M

masheen

Новичок
Сообщения
25
Репутация
0
inververs сказал(а):
Вот по первому вопросу.
Код:
Local $text = '1-2' & @CRLF & '1-3' & @CRLF & '1-4' & @CRLF & '1-5' & @CRLF & '1-6'
Local $aReg = StringRegExp($text, '(?<=1)..', 3) ;Поиск регуляркой
If IsArray($aReg) Then ;если найдено, то будет массив
	MsgBox(0, 'Всего найдено', UBound($aReg))
	For $i = 0 To UBound($aReg) - 1 ;цикл по массиву
		MsgBox(0, 'Добавь это в коллекцию', $aReg[$i]); к элементам массива обращаться так: $aReg[индекс]
	Next
EndIf


да спасибо с этим разобрался.
смотри у меня будут три поиска по тексту
например текст
12а
12б
12в
12г
12д
первый поиск будет искать единицу
второй поиск будет искать двойку
третий поиск будет искать букву

и мне нужно в итоге чтобы они как то объединились в один массив
чтобы например запрос первой строчки из масива выдавал
12а
вторая
12б

и так далее
 
Автор
M

masheen

Новичок
Сообщения
25
Репутация
0
inververs сказал(а):
нельзя так сделать.
спасибо

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

msgbox (0,"", Array1[0] & Array2[0] & Array3[0]) ??? это будет первая строчка 12а
msgbox (0,"", Array1[1] & Array2[1] & Array3[1]) ??? это будет первая строчка 12б
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Если вам нужно искать по строкам ( в тексте ) то поделите текст на строки - получите массив - и дальше уже ищите в каждом элементе массива. Так будет надежнее.


Добавлено:
Сообщение автоматически объединено:

Или напишите в "Стол заказов". Наверняка найдется простой способ. Т.к мне не очень понятно, что вы делаете. Про массивы рассказали ,про регулярки тоже - слепить все вместе - ваша задача :smile:
 
Автор
M

masheen

Новичок
Сообщения
25
Репутация
0
inververs сказал(а):
Если вам нужно искать по строкам ( в тексте ) то поделите текст на строки - получите массив - и дальше уже ищите в каждом элементе массива. Так будет надежнее.


Добавлено:
Сообщение автоматически объединено:

Или напишите в "Стол заказов". Наверняка найдется простой способ. Т.к мне не очень понятно, что вы делаете. Про массивы рассказали ,про регулярки тоже - слепить все вместе - ваша задача :smile:




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

msgbox (0,"", Array1[0] & Array2[0] & Array3[0]) ??? это будет первая строчка 12а
msgbox (0,"", Array1[1] & Array2[1] & Array3[1]) ??? это будет первая строчка 12б
 
Автор
M

masheen

Новичок
Сообщения
25
Репутация
0
Верх