Что нового

как получить строку по имени группы и найти в ней определённый ряд

running-frag

why me?
Сообщения
441
Репутация
60
название топика будет измененно согласно ответу в топике

итак смысл такой, есть массив (строк), одномерный, в нём следующее (прицеп такой что сначало идёт название группы после то что в ней)

Код:
; bla1 group small
; green
; green
; green
; bla2 group big
; green
; yellow
; red

задача получать по имени группы (в нашем случае это bla1 и bla2) просчитать есть ли в ней (к примеру) ряд "red"

1. при этом ряд где есть слово "group" можно считать началом отсчёта для группы (т.е. это заголовок группы)
2. при этом, количество подстрок в группе может варьироваться (не статическое количество)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: поиск подстроки в массиве

running-frag [?]
название топика будет измененно согласно ответу в топике
Не нужно так делать больше.
Дождись совета по названию а потом создавай тему.
 

sngr

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

Код:
#include 'array.au3'
$file=FileRead(@ScriptDir & '\12')
$str=StringRegExp($file,'(?s)bla\d group.*?(red).*',3)
_ArrayDisplay($str)
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Re: поиск подстроки в массиве

sngr, из массива а не из файла ;)
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
CreatoR [?]
Не нужно так делать больше.Дождись совета по названию а потом создавай тему.
:( в порыве мысли хотел побыстрее,


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

sngr
как вариант, сейчас попробую весь массив переписать в одну строку и применить к нему твою регулярку

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


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

в общем получилось без регулярки, если у кого то есть мысли как это реализовать проще - буду рад увидеть

Код:
Func _drones_groupInAgro ($_groupName) ; Return True or False
	Local $_droneList
	Local $_rowString
	Local $_droneFlag = False
	
	$_droneList = _drones_getMainGroupList ("XXX")	; получаем массив	
	For $i = 1 To $_droneList[0]
		
		
		If StringInStr ($_droneList[$i], $_groupName) Then
			$_rowString = $_droneList[$i]
			$_droneFlag = True
		Else
			If StringInStr ($_droneList[$i], "group") Then
				$_droneFlag = False
			Else
				If $_droneFlag Then $_rowString &= "|"& $_droneList[$i]
			EndIf
			
		EndIf
		
		
	Next
	ConsoleWrite ($_rowString)
	If StringInStr ($_rowString, "red") Then Return True
	
	Return False
	
EndFunc


т.е. записуем в строку только начало группы (её имя) и всё что идёт дальше, до след. группы
после банально используем StringInStr()
 
Верх