Здравствуйте, Armadil, Вы писали:
A>В базе хранитятся записи в таком виде:
A>100текст$Aтекст$Bтекст$Стекст@200текст$Aтекст$Bтекст$Стекст@300текст$Aтекст$Bтекст$Стекст
А длина всех элементов "текст" для каждого индекса одинаковая?
... << RSDN@Home 1.1.3 stable >>
Re[2]: Строку на подстроки, а подстроки на подподстроки :)
Здравствуйте, Эдик, Вы писали:
Э>Здравствуйте, Armadil, Вы писали:
A>>В базе хранитятся записи в таком виде:
A>>100текст$Aтекст$Bтекст$Стекст@200текст$Aтекст$Bтекст$Стекст@300текст$Aтекст$Bтекст$Стекст
Э>А длина всех элементов "текст" для каждого индекса одинаковая?
Если бы. После числовых только 2 символа. После буквенных, сколько угодно.
То есть, это что-то вроде структуры:
100 — Адрес
100A — Почтовый индекс
100B — Город
100С — Улица, дом, квартира
и т.д.
Re[3]: Строку на подстроки, а подстроки на подподстроки :)
Здравствуйте, Armadil, Вы писали:
A>Если бы. После числовых только 2 символа. После буквенных, сколько угодно.
A>То есть, это что-то вроде структуры: A>100 — Адрес A>100A — Почтовый индекс A>100B — Город A>100С — Улица, дом, квартира
A>и т.д.
может длина целиком этого, чего-то "вроде структуры" одинаковая?
например сумма длинн полей (100+A+B+C), постоянна?
если нет, то это очень странная "база" , имхо, с такой "базой" быстро работать не получиться.
Есть там хоть что-то, с помощью чего можно вычислять смещение? или нужно перебирать всю "базу" в поиске нужного индекса?
Re[4]: Строку на подстроки, а подстроки на подподстроки :)
Здравствуйте, _Stash, Вы писали:
_S>может длина целиком этого, чего-то "вроде структуры" одинаковая? _S>например сумма длинн полей (100+A+B+C), постоянна? _S>если нет, то это очень странная "база" , имхо, с такой "базой" быстро работать не получиться. _S>Есть там хоть что-то, с помощью чего можно вычислять смещение? или нужно перебирать всю "базу" в поиске нужного индекса?
Поиск в базе осуществляется посредством созданных индексных таблиц. Индексные таблицы ссылаются на на таблицу, где хрянятся поля с "проблемными строками".
Длина строки в поле таблицы может быть разной, и зависит от введённых данных,или не введённых
То есть, если ввели A и B, то С могут и забыть, или индекс С в строке с индексом 200 не предусмотрен форматом строки.
Базу перебирать не надо, только строку.
Пример строки:
100$A1200323$Bг.Тутамовс$СПочинкина,к.20,кв.3@200$AИванов Иван$B12 лет@300..$A...и т.д.
Re: Строку на подстроки, а подстроки на подподстроки :)
Здравствуйте, 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, Вы писали:
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"][""];