Что нового

передача данных через строку

running-frag

why me?
Сообщения
441
Репутация
60
задача следующая, есть функция которая выдаёт массивом данные, что то похожее на:
Код:
$_icon[0] = $_temp[1]														; отдаём имя
$_icon[1] = $_iconHash[1]													; отдаём X (первый входящий пиксель цветов)
$_icon[2] = $_iconHash[2]													; отдаём Y (первый входящий пиксель цветов)
$_icon[3] = _overview_getIconLocked ($_icon) 								; is locked (True если залочен)
$_icon[4] = _overview_getIconLocking ($_icon)								; is locking (True если в процессе лока)

когда мы получаем этот массив мы его переписуем в строку, ну допустим что то типо:
Код:
Local $_return[1]
Local $_rowString

$_return[0] = 0

For $i = 1 To 10	

	$_icon = getIconArray () ; получаем массив
	
	$_rowString = $_icon[0] & " (x:"& $_icon[1] &"; y:"&$_icon[2] &")"
	
	_ArrayAdd ($_return, $_rowString)
	$_return[0] += 1
	
	$_rowString = ""
	
Next


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

в чём проблема:
1. как проще реализовать запись, что б не парится с регулярным выражением (как таковых критерий нет, приемлимо любые варианты)
2. я не знаю как написать регулярку под это дело, а именно считывания данных x\y из строки
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Можно добавить уникальные разделители, чтобы не маяться с регулярками:
Код:
#include <Array.au3>

Dim $aArr[5] = ['name', 123, 456, 1, 1]
_ArrayDisplay($aArr)
$sStr = $aArr[0] & ' (x:|' & $aArr[1] & '| y:|' & $aArr[2] & '|)'
ConsoleWrite($sStr & @CRLF)
$aNew = StringSplit($sStr, '|', 2)
_ArrayDisplay($aNew)
ConsoleWrite('x: ' & $aNew[1] & @CRLF)
ConsoleWrite('y: ' & $aNew[3] & @CRLF)

А вообще регулярка элементарная:
Код:
#include <Array.au3>

Dim $aArr[5] = ['name', 123, 456, 1, 1]
_ArrayDisplay($aArr)
$sStr = $aArr[0] & ' (x:' & $aArr[1] & ' y:' & $aArr[2] & ')'
ConsoleWrite($sStr & @CRLF)
$aNew = StringRegExp($sStr, ':(\d+).*?:(\d+)', 3)
_ArrayDisplay($aNew)
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
на счёт StringSplit я думал, но думаю это не совсем подходит

почему - а если у нас строка будет (выше я привёл банальнейший пример)
"fr locked (xxx;yyy)" где xxx и yyy Int значения
"bs locking (xxx;yyy)"
"sentry (xxx;yyy)"
при этом выражение "locked" может быть а может и не быть

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


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

методом научного.... получается вот такое
Код:
#include <Array.au3>

Dim $aArr[5] = ['name', 123, 456, 1, 1]
_ArrayDisplay($aArr)
$sStr = $aArr[0] & ' (' & $aArr[1] & ';' & $aArr[2] & ')'
ConsoleWrite($sStr & @CRLF)
$aNew = StringRegExp($sStr, '(\d+).*?(\d+)', 3)
_ArrayDisplay($aNew)
 
Верх