Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как разбить строку


Страницы:   1 2 3

andrewtitoff ©   (2009-11-07 21:33:00) 

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


sniknik   (2009-11-08 02:16:00) [21]

> то это не вариант т.к. это мы уже проходили
это вариант, который "вы" не сумели сделать...

но вообще комбобоксы не очень удобны при зависимом друг от друга выборе, информация должна быть открытой, длч примера вот так
http://support.amd.com/us/gpudownload/Pages/index.aspx

> и тормозня
ой, вот только не надо насчет тормозов заливать...
> Form1.ADOTable4.Filter:=s;
c ADOTable это выглядит так будто заботишься о волосах, чтобы их не порезало, во время казни на гильотине...
в смысле, если тебя ADOTable устраивает, то даже не заикайся что что-то медленно...

> Где?
а что ты пишешь? вот там.


andrewtitoff   (2009-11-08 01:44:00) [22]


> Омлет ©   (08.11.09 01:40) [29]
> > [28] andrewtitoff ©   (08.11.09 01:35)Делай отдельные
> зависимые поля.

Где?, структуру базы я менять не могу, вернее могу немного, но только то- что не повлияет на работу существующей оболочки...


andrewtitoff   (2009-11-08 01:42:00) [23]


> Омлет ©   (08.11.09 01:18) [27]
> Только не ясно, зачем такое может потребоваться?Если нужно
> получить таблицу по какому-то фильтру (Улица + дом и т.п.
> ), может не стоит пихать это всё в одни комбобокс?

Если ты про несколько комбобоксов - то это не вариант т.к. это мы уже проходили, во первых пользователю не очень удобно, а во вторых не меньший гемморой и тормозня т.к. по вводу начала адреса пользователь должен видеть все варианты адресов - а следовательно нужно после выбора улицы в первом комбобоксе фильтровать и вносить номера домов только подходящие условию во второй комбобокс и.т.д....


Омлет   (2009-11-08 01:40:00) [24]

> [28] andrewtitoff ©   (08.11.09 01:35)

Делай отдельные зависимые поля.


andrewtitoff   (2009-11-08 01:35:00) [25]


> Омлет ©   (08.11.09 01:18) [27]
> Только не ясно, зачем такое может потребоваться?Если нужно
> получить таблицу по какому-то фильтру (Улица + дом и т.п.
> ), может не стоит пихать это всё в одни комбобокс?

А куда пихать то?, ту дело такое - что иногда может понадобиться конкретный адрес(хотя и по конкретному адресу может быть несколько лифтов, а следовательно несколько записей), а иногда и целую улицу посмотреть нужно....

Требуется вообще все что угодно, в будущем нужно будет и универсальную выборку по всем 80-ти полям, но об этом потом, когда придет время....


Омлет   (2009-11-08 01:18:00) [26]

Только не ясно, зачем такое может потребоваться?
Если нужно получить таблицу по какому-то фильтру (Улица + дом и т.п.), может не стоит пихать это всё в одни комбобокс?


Омлет   (2009-11-08 01:16:00) [27]

> [25] andrewtitoff ©   (08.11.09 01:04)

Для 19 придется парсить.


andrewtitoff   (2009-11-08 01:04:00) [28]


> Омлет ©   (08.11.09 00:55) [24]
> > [23] andrewtitoff ©   (08.11.09 00:44)Я не язвлю, а хочу
> навести на мысль, что лучше, к примеру, хранить список адресов
> в памяти (список объектов или записей с полями улица, дом
> и т.д.) - оттуда формировать список для Combobox, оттдуда
> же доставать адрес в первородном виде, не боясь, что что-
> то может не распарситься.


Ну это как раз по моему и есть изврат..., зачем еще и в памяти то хранить?, тогда уж как сказал Сергей М. хранить закладки на запись..., только вот если вы внимательно читали  - то как быть со случаем когда нужно показать  несколько записей как я уже писал в посте [19]?...


Омлет   (2009-11-08 00:55:00) [29]

> [23] andrewtitoff ©   (08.11.09 00:44)

Я не язвлю, а хочу навести на мысль, что лучше, к примеру, хранить список адресов в памяти (список объектов или записей с полями улица, дом и т.д.) - оттуда формировать список для Combobox, оттдуда же доставать адрес в первородном виде, не боясь, что что-то может не распарситься.


andrewtitoff   (2009-11-08 00:44:00) [30]


> Омлет ©   (08.11.09 00:39) [22]
> > язвить то мы все умеемПросто странный подход, имея нормальные
> исходные данные, их не использовать.Если в базе появится
> улица "д. Медведева", что твоя программа выловит из адреса?
>

Ну так скажите как нужно делать, я же за этим и обращаюсь сюда...
А если язвить - то по поводу "Если в базе появится  улица "д. Медведева", что твоя программа выловит из адреса?" то программа выловит..., т.к. "д. "<>" д. "....


Омлет   (2009-11-08 00:39:00) [31]

> язвить то мы все умеем

Просто странный подход, имея нормальные исходные данные, их не использовать.
Если в базе появится улица "д. Медведева", что твоя программа выловит из адреса?


andrewtitoff   (2009-11-08 00:11:00) [32]

Да, кстати в одной парадной может быть несколько лифтов и соответственно несколько записей с идентичными адресами


andrewtitoff   (2009-11-08 00:10:00) [33]

т.е. я это хочу делать примерно так:
if ComboBox82.Text<>'' then
begin

здесь нужно s присвоить строку фильтра

Form1.ADOTable4.Filter:=s;
Form1.ADOTable4.Filtered:=true;
 end;


andrewtitoff   (2009-11-08 00:06:00) [34]


> Сергей М. ©   (08.11.09 00:02) [18]
> > просто условия такиеДа я не против условий)Мне не понятно,
>  зачем сначала месить кашу, а затем извлекать из нее ингредиенты
> ..Можно же в комбобоксе для каждого эл-та хранить помимо
> строки закладку (TDataSet.GetBookmark) на запись (в "живом"
> дейтасете, разумеется), из которой эта строка была получена.
> При выборе в комбобоксе элемента достаточно просто перейти
> по этой закладке (TDataSet.GotoBookmark) на соответствующую
> запись в дейтасете и - вуаля ! - искомые ингредиенты готовы
> к получению)


А если их несколько?
допустим есть адреса
Ветеранов д. 5 п. 1
Ветеранов д. 5 п. 2
Ветеранов д. 5 п. 3
Ветеранов д. 5 п. 4

Нужно что бы можно было ввести

Ветеранов д. 5

и в итоге получить таблицу с этими 4-мя адресами, со всеми вытекающими возможностями ее просмотра/редактирования


Сергей М.   (2009-11-08 00:02:00) [35]


> просто условия такие


Да я не против условий)
Мне не понятно, зачем сначала месить кашу, а затем извлекать из нее ингредиенты ..
Можно же в комбобоксе для каждого эл-та хранить помимо строки закладку (TDataSet.GetBookmark) на запись (в "живом" дейтасете, разумеется), из которой эта строка была получена.

При выборе в комбобоксе элемента достаточно просто перейти по этой закладке (TDataSet.GotoBookmark) на соответствующую запись в дейтасете и - вуаля ! - искомые ингредиенты готовы к получению)


andrewtitoff   (2009-11-07 23:56:00) [36]


> Омлет ©   (07.11.09 23:52) [15]
> Гениально. До обеда яму копаем, после - обеда закапываем.
>

Ну тогда предложите свое решение, язвить то мы все умеем, только по моему форум создавался не для этого...


andrewtitoff   (2009-11-07 23:54:00) [37]


> Сергей М. ©   (07.11.09 23:45) [14]
> И зачем нужно всю эту солянку грузитьь в комбобокс, чтобы
> потом париться с разбором этой солянки ?

А как?, просто условия такие:
-Должен быть ниспадающий список
-возможность ввода начальных букв
-адрес должен быть в виде одной строки
примерно так, в общем это отдельная форма поиска в базе по адресу состоящая из одного комбобокса(условно)


Омлет   (2009-11-07 23:52:00) [38]

Гениально. До обеда яму копаем, после - обеда закапываем.


Сергей М.   (2009-11-07 23:45:00) [39]

И зачем нужно всю эту солянку грузитьь в комбобокс, чтобы потом париться с разбором этой солянки ?


andrewtitoff   (2009-11-07 23:41:00) [40]


> Сергей М. ©   (07.11.09 22:23) [12]
> Ага.Так а строка-то откуда взялась ?Это результирующее представление
> той самой выборки или что ?И каким боком тут комбобокс ?
>


Ну у меня вот так сделано:

Form1.ADOQuery1.SQL.Text := 'select REGNUM, STREET, HOUSE, CORP, PARNUM from lift';
Form1.ADOQuery1.Open;
while not Form1.ADOQuery1.Eof do
begin
Form2.ComboBox81.Items.Add(Form1.ADOQuery1.Fields[0].AsString);
s:='';
if Form1.ADOQuery1.Fields[1].AsString<>'' then s:=Form1.ADOQuery1.Fields[1].AsString;
if Form1.ADOQuery1.Fields[2].AsString<>'' then s:=s+' д. '+Form1.ADOQuery1.Fields[2].AsString;
if Form1.ADOQuery1.Fields[3].AsString<>'' then s:=s+' к. '+Form1.ADOQuery1.Fields[3].AsString;
if Form1.ADOQuery1.Fields[4].AsString<>'' then s:=s+' п. '+Form1.ADOQuery1.Fields[4].AsString;
Form2.ComboBox82.Items.Add(s);
Form1.ADOQuery1.Next;
end;


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо