Строку на подстроки, а подстроки на подподстроки :)
От: Armadil  
Дата: 12.09.04 07:36
Оценка:
Народ, подскажите, пожалуйста, как справится с следуюсчей задечей:

В базе хранитятся записи в таком виде:

100текст$Aтекст$Bтекст$Стекст@200текст$Aтекст$Bтекст$Стекст@300текст$Aтекст$Bтекст$Стекст

Как сделать так, что бы можно было обращаться к массиву прмерно так:

result["200"]["B"];
или
result["100"];

В результате должен выводится требуемый элемент массива.

Re: Строку на подстроки, а подстроки на подподстроки :)
От: Эдик Россия  
Дата: 12.09.04 09:10
Оценка:
Здравствуйте, Armadil, Вы писали:

A>В базе хранитятся записи в таком виде:


A>100текст$Aтекст$Bтекст$Стекст@200текст$Aтекст$Bтекст$Стекст@300текст$Aтекст$Bтекст$Стекст


А длина всех элементов "текст" для каждого индекса одинаковая?
... << RSDN@Home 1.1.3 stable >>
Re[2]: Строку на подстроки, а подстроки на подподстроки :)
От: Armadil  
Дата: 13.09.04 05:19
Оценка:
Здравствуйте, Эдик, Вы писали:

Э>Здравствуйте, Armadil, Вы писали:


A>>В базе хранитятся записи в таком виде:


A>>100текст$Aтекст$Bтекст$Стекст@200текст$Aтекст$Bтекст$Стекст@300текст$Aтекст$Bтекст$Стекст


Э>А длина всех элементов "текст" для каждого индекса одинаковая?


Если бы. После числовых только 2 символа. После буквенных, сколько угодно.

То есть, это что-то вроде структуры:
100 — Адрес
100A — Почтовый индекс
100B — Город
100С — Улица, дом, квартира

и т.д.
Re[3]: Строку на подстроки, а подстроки на подподстроки :)
От: _Stash Россия  
Дата: 13.09.04 06:19
Оценка:
Здравствуйте, Armadil, Вы писали:

A>Если бы. После числовых только 2 символа. После буквенных, сколько угодно.


A>То есть, это что-то вроде структуры:

A>100 — Адрес
A>100A — Почтовый индекс
A>100B — Город
A>100С — Улица, дом, квартира

A>и т.д.


может длина целиком этого, чего-то "вроде структуры" одинаковая?
например сумма длинн полей (100+A+B+C), постоянна?
если нет, то это очень странная "база" , имхо, с такой "базой" быстро работать не получиться.
Есть там хоть что-то, с помощью чего можно вычислять смещение? или нужно перебирать всю "базу" в поиске нужного индекса?
Re[4]: Строку на подстроки, а подстроки на подподстроки :)
От: Armadil  
Дата: 13.09.04 08:02
Оценка:
Здравствуйте, _Stash, Вы писали:

_S>может длина целиком этого, чего-то "вроде структуры" одинаковая?

_S>например сумма длинн полей (100+A+B+C), постоянна?
_S>если нет, то это очень странная "база" , имхо, с такой "базой" быстро работать не получиться.
_S>Есть там хоть что-то, с помощью чего можно вычислять смещение? или нужно перебирать всю "базу" в поиске нужного индекса?

Поиск в базе осуществляется посредством созданных индексных таблиц. Индексные таблицы ссылаются на на таблицу, где хрянятся поля с "проблемными строками".

Длина строки в поле таблицы может быть разной, и зависит от введённых данных,или не введённых
То есть, если ввели A и B, то С могут и забыть, или индекс С в строке с индексом 200 не предусмотрен форматом строки.


Базу перебирать не надо, только строку.
Пример строки:
100$A1200323$Bг.Тутамовс$СПочинкина,к.20,кв.3@200$AИванов Иван$B12 лет@300..$A...и т.д.
Re: Строку на подстроки, а подстроки на подподстроки :)
От: Dj.ValDen Украина http://ua.linkedin.com/in/dvalchuk
Дата: 13.09.04 12:12
Оценка:
Здравствуйте, Armadil, Вы писали:

A>Народ, подскажите, пожалуйста, как справится с следуюсчей задечей:


A>В базе хранитятся записи в таком виде:


A>100текст$Aтекст$Bтекст$Стекст@200текст$Aтекст$Bтекст$Стекст@300текст$Aтекст$Bтекст$Стекст


A>Как сделать так, что бы можно было обращаться к массиву прмерно так:


A>result["200"]["B"];

A>или
A>result["100"];

A>В результате должен выводится требуемый элемент массива.


A>



boost::regex
boost::spirit
не помогут?
С уважением Denys Valchuk

IMHO чем больше мнений тем оптимальней выбор варианта... :)
Re: Строку на подстроки, а подстроки на подподстроки :)
От: Armadil  
Дата: 14.09.04 14:56
Оценка:
Млин, всё как-то нелегко.

На php это реализуется так:
Как на попроще C нинаю

<?
$ITEM = "100текст#Aтекст2#Bтекст3#Стекст4@200текст#Aтекст12#Bтекст12#Стекст12@300текст#Aтекст22#Bтекст23#Стекст24";


$string = explode("@",$ITEM);
for ($i=0;$i<count($string);$i++)
{
$podpole = explode("#",$string[$i]);
$index = preg_match("/[0-9]{1,3}/",$podpole[0],$pole);
$podpole[0] = preg_replace("/[0-9]{1,5}/","",$podpole[0]);
$result[$pole[0]]["podpole"] = $podpole[0];
for ($j=1;$j<count($podpole);$j++)
{
$result[$pole[0]][substr($podpole[$j],0,1)]=substr($podpole[$j],1,strlen($podpole[$j]));
}
}
echo "<pre>";
print_r($result);
echo "</pre>";
?>
Re: Строку на подстроки, а подстроки на подподстроки :)
От: jazzer Россия Skype: enerjazzer
Дата: 14.09.04 15:29
Оценка:
Здравствуйте, Armadil, Вы писали:

A>Народ, подскажите, пожалуйста, как справится с следуюсчей задечей:


A>В базе хранитятся записи в таком виде:


A>100текст$Aтекст$Bтекст$Стекст@200текст$Aтекст$Bтекст$Стекст@300текст$Aтекст$Bтекст$Стекст


A>Как сделать так, что бы можно было обращаться к массиву прмерно так:


A>result["200"]["B"];

A>или
A>result["100"];

A>В результате должен выводится требуемый элемент массива.


A>


using namespace std;
typedef map<string, string> ssmap;
map<string, ssmap > result;

пока строка не кончилась
{
  string key = первые три символа; // первая итерация - "100"
  ssmap& record = result[key]; // сгенерился новый ssmap
  string s = все, что до ближайшего $ или @;
  record[""] = s; // первая итерация - первый "текст"
  пока находится $ или @
  {
     record[первая буква] = остаток до $ или @; // первая итерация - "А" и второй "текст"
     if (@) вываливаемся на пока строка не кончилась;
  }
}

теперь можно писать
result["100"]["A"];
result["100"][""];
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.