Что нового

Получить в переменную массив данных

Dotacka

Новичок
Сообщения
37
Репутация
0
Добрый день всем!

Возникла такая задачка у меня.
Есть массив данных в строке в файле (*.txt) :

Картошка 34 яблоко груша 334 23 7

Нужно записать эти данные в переменные в таком виде.

Код:
$a = Картошка
$b = 34
$c = яблоко
$d = груша
$e = 334
$f = 23
$g = 7


Пробелы являются разделителями между значениями которые беруться в переменную. Пробелов может быть множество или один.

Количество значений в одной строке не более 26 - т.е Используем англиский алфавит. (abcdefghijklmnopqrstuvwxyz)

Количество слов и цифр в строке изначально неизвестно...

Подскажет кто-нибудь? Либо буду благодарен за пример похожей тематики - попробую разобрать сам.
 
Последнее редактирование:

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,444
Код:
$str = " Картошка 34   яблоко груша     334  23 7   "

; убрать лишние пробелы
$str = StringStripWS($str, 1+2+4)

; создать массив
$arr = StringSplit($str, " ")
С какой целью раскладывать массив по переменным? Вместо $a просто пишите $arr[1], вмеcто $b пишите $arr[2], вместо $c - $arr[3] и т.д.
 
Автор
D

Dotacka

Новичок
Сообщения
37
Репутация
0
Код:
$str = " Картошка 34   яблоко груша     334  23 7   "

; убрать лишние пробелы
$str = StringStripWS($str, 1+2+4)

; создать массив
$arr = StringSplit($str, " ")
С какой целью раскладывать массив по переменным? Вместо $a просто пишите $arr[1], вмеcто $b пишите $arr[2], вместо $c - $arr[3] и т.д.
Спасибо! сработало.
Цель такая:
в строке идут параметры всегда в определенной последовательности (Квадрат-Ширина-Длина)(Яблоко-радиус-цвет). Получив их в переменную можно их потом умножать и складывать и получать данные.
 
Последнее редактирование:

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,444
Элементы массива такие же переменные. Просто выглядят иначе.
 
Автор
D

Dotacka

Новичок
Сообщения
37
Репутация
0
Элементы массива такие же переменные. Просто выглядят иначе.
Cпасибо! уже разобрался. Использую $arr[0]...$arr[100]
Сообщение автоматически объединено:

Элементы массива такие же переменные. Просто выглядят иначе.
Прошу прощения, я еще хотел уточнить один момент.
Возможно ли как-либо группировать элементы.
Например:
Cтрока вида:
2 А B C D E 1 ( $arr[1] = 2 $arr[2] = А B C D E $arr[3] = 1)
или
1 A B 3 ( $arr[1] = 1 $arr[2] = А B $arr[3] = 3)
или
4 А 1 ( $arr[1] = 4 $arr[2] = А $arr[3] = 1)

Я например всегда хотел бы получать в переменную буквы между первой и последней цифровой.

Возможно ли это как то сделать с разумной простотой?

Я начал делать cам с помощью данных выражений :
Код:
If Not StringRegExp($sText, '[[:alpha:]А-ёЁ]')   
If Not StringRegExp($sText, '\d')

У меня получается куча условий и вложенных условий...вобщем мрак(((((
 
Последнее редактирование:
Автор
D

Dotacka

Новичок
Сообщения
37
Репутация
0
Код:
$a = StringRegExp("2 А B C D E 1", "(\d) (.*) (\d)", 3)

ConsoleWrite($a[0] & @CRLF & $a[1] & @CRLF & $a[2] & @CRLF)
Превосходно. Cпасибо
Сообщение автоматически объединено:

Код:
$a = StringRegExp("2 А B C D E 1", "(\d) (.*) (\d)", 3)

ConsoleWrite($a[0] & @CRLF & $a[1] & @CRLF & $a[2] & @CRLF)
Позвольте спросить- а если числа не целые? Например 10,3 то как сделать что бы скрипт читал дробные числа?
 
Последнее редактирование:

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,485
Для удобства обращения к массивам я обычно делаю так:

Код:
Global Enum $a = 0, $b, $c, $d, $e, $f

...

$arr[$a] ;эквивалентно $arr[0]
$arr[$b] ;эквивалентно $arr[1]
;и т.д
 
Автор
D

Dotacka

Новичок
Сообщения
37
Репутация
0
Для удобства обращения к массивам я обычно делаю так:

Код:
Global Enum $a = 0, $b, $c, $d, $e, $f

...

$arr[$a] ;эквивалентно $arr[0]
$arr[$b] ;эквивалентно $arr[1]
;и т.д
Благодарю
Сообщение автоматически объединено:

Код:
$a = StringRegExp("2 А B C D E 1", "(\d) (.*) (\d)", 3)

ConsoleWrite($a[0] & @CRLF & $a[1] & @CRLF & $a[2] & @CRLF)

Прошу прощения- у меня возникла еще одна сложность. Я пытаюсь выполнить отсечение ненужного мусора при применении вашего выражения, но не получается((

Код:
$a = StringRegExp("2 А B C D E 1","([^ ]+) (.*) (\d.*)", 3)

ConsoleWrite($a[0] & @CRLF & $a[1] & @CRLF & $a[2] & @CRLF)


имеется ввиду что если у меня есть некий массив (2 А B C D E 1 dsfc3f543f grev543f3) - я хочу отсекать все что после второй цифры ( не учитывать)
Тобишь пробел служит отделителем после второй цифры (1) - после которого массив уже не рассматривается.
Необходим такой результат:
Код:
$a = StringRegExp("2 А B C D E 1 dsfc3f543f grev543f3","([^ ]+) (.*) (\d.*)", 3)

ConsoleWrite($a[0] & @CRLF & $a[1] & @CRLF & $a[2] & @CRLF)


$a[0]=2
$a[1]=А B C D E
$a[2]=1
 
Последнее редактирование:
Верх