Что нового

Разделить слова и цифры в разные ячейки массива из строки

MaxHex

Новичок
Сообщения
16
Репутация
0
Здравствуйте, подскажите можно ли как то разбить строку таким образом, есть скажем адрес "664049, обл Иркутская, г Иркутск, ул Багратиона, дом № 52/1" и сделать так что бы данные вбивались в массив таки образом: скажем в $Mas[0][0] - Все не цифры, а в $Mas[1][0] все цифры?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Знаки ". , / " в массив не цифр ? Значение" 52/1" - это в два элемента массива "52" и "1" ? Лучше , если Вы напишите то, что хотите видеть в результате в массиве (распишите все элементы массива результата)
 
Автор
M

MaxHex

Новичок
Сообщения
16
Репутация
0
Тут меня немного поправили и получается что в итоге должно получиться иначе =( в "$mas[0][0] = 664049, обл Иркутская, г Иркутск, ул Багратиона", а в "$mas[1][0] = дом № 52/1" но слово дом моет быть как "д", "д." или просто не быть т.е. будет написано " Иркутская, г Иркутск, ул Багратиона, 52/1" я так понимаю так уже регулярку не сделать?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Разделить по запятым при помощи "StringSplit()"(можно и регулярным выражением), ведь очерёдность следования данных одинакова ? Индекс, Область, Город, Улица , Дом
 
Автор
M

MaxHex

Новичок
Сообщения
16
Репутация
0
Очередность одинакова, но не всегда есть номер дома например, не всегда есть индекс, во вложении excel с примерами


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

Так же как оказалось повторения желательно тоже исключить
 

Вложения

  • 3.rar
    44.3 КБ · Просмотры: 2

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Закономерность есть, нужно заполнять справа-на лево , всегда будет № дома - улица - город итд, но выбивается из закономерности подобные строки :"3 Июля, 33, 33/2, 33/3,35"
 
Автор
M

MaxHex

Новичок
Сообщения
16
Репутация
0
Не всегда, например в строчке 601, но там можно оставить только название а номер дома оставить пустым, т.е. $mas[0][0] = "Маркова" а $mas[1][0] = ""


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

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

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Без номера дома вычислить можно, но как с таким быть : "Иркутский р-н в 1,2 км автодороги Иркутск-Агродорспецстрой, с левой стороны" ...
Можно более менее верно заполнить процентов 90, остальное пока и в голову не приходит как ...
Вот , например можно так, но это без учёта вариантов, которые не подчиняются закономерности (перед последней запятой не номер дома и просто названия улиц без номеров и запятыфх в строке)
Код:
#include <array.au3>
#include <excel.au3>

$oExcel = _Excel_Open(False)
$oBook = _Excel_BookOpen($oExcel, @ScriptDir & '\3.xlsx')
$aArray = _Excel_RangeRead($oBook)
_Excel_Close($oExcel)

$aArray = _ArrayUnique($aArray)

$n = 0
Dim $aResult[2][$n]

For $i = 1 To UBound($aArray) - 1
	$iPoz = StringInStr($aArray[$i], ',', Default, -1)
	If $iPoz Then
		$n += 1
		ReDim $aResult[2][$n]
		$aResult[0][$n - 1] = StringLeft($aArray[$i], $iPoz - 1)
		$aResult[1][$n - 1] = StringRight($aArray[$i], StringLen($aArray[$i]) - $iPoz)
	EndIf
Next

_ArrayDisplay($aResult)

это так, в первом приближении , можно вычислять , что не вошло и дописывать условия
 
Верх