Цитата:
Изначально опубликовано Smith
Есть строка
,,Казань,,Татарстан,11,,38
Надо из нее выдернуть город (после двух запятых), улицу (после 4-х запятых) и т.д.
Не, это программистский подход.
Без программирования задача должна ставится следующим образом: есть клиент - узнать из адреса его город и улицу. Адрес строится согласно адресного формата.
Теперь и только теперь в дело вступает программист.
Во-первых, не надо ничего программировать и ничего никуда переводить, не надо никаких строк.
Во-вторых, смотрим стандартный функционал. Есть map AddressMap. У него есть метод AddressMap.loadFields(). Этот метод возвращает контейнер [address, streetName, zipCodeId, city, countryId, stateId, countyId].
Вот и юзайте этот стандартный метод.
В сторону и про себя: вот бы локализаторы вместо того, чтобы городить свои мапы, нормально расширили бы станадртные...
Тогда вызов будут выглядеть так:
PHP код:
Containter c;
c = custTable.AddressMap::loadFields()
info( conpeek(c, 4) ); // город
info( conpeek(c, 2) ); // улица
Метод будет работать с ЛЮБЫМ адресным форматом!
Если же вы все такие поторопились и у вас есть только строка, то можно выкрутиться следующим образом - присвоить эту строку новой записи. Не забудьте указать страну.
PHP код:
Container c;
CustTable custTable;
;
custTable.country = 'RU'; // укажите код России в вашей базе
custTable.address = ", , , Казань, Татарстан, 11, , 38";
c = custTable.AddressMap::loadFields();
info( conpeek(c, 4) ); // город
info( conpeek(c, 2) ); // улица
Обратите внимание, что строка должна полностью соответствовать адресному формату. Так у меня в качестве разделителей указана запятая с пробелом ", ". Поэтому в строке мне пришлось добавить пробелы и передвинуть Казань на четвертую позицию...