Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Вниз

Как разбить строку   Найти похожие ветки 

 
andrewtitoff ©   (2009-11-07 21:33) [0]

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


 
Сергей М. ©   (2009-11-07 21:43) [1]


> как правильно


Т.е. как неправильно - это ты знаешь, а как правильно - это уже для тебя проблема, так ?


 
Омлет ©   (2009-11-07 21:44) [2]

Pos("д.", S)?


 
andrewtitoff ©   (2009-11-07 21:50) [3]


> Сергей М. ©   (07.11.09 21:43) [1]
> > как правильноТ.е. как неправильно - это ты знаешь, а как
> правильно - это уже для тебя проблема, так ?

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


 
andrewtitoff ©   (2009-11-07 21:52) [4]


> Омлет ©   (07.11.09 21:44) [2]
> Pos("д.", S)?

Да это понятно, как например вот такое разбить: "Авангардная д. 20 п. 4"?


 
Сергей М. ©   (2009-11-07 21:53) [5]


> я это себе представляю только при помощи "copy" и "pos"


Правильно представляешь.

> пока ничего в голову не приходит кроме как линейно


Так тебя же никто не торопит)
Посиди, подумай, изложи мысли на бумаге - и решениес циклом  придет)


 
andrewtitoff ©   (2009-11-07 21:59) [6]


> Сергей М. ©   (07.11.09 21:53) [5]
> > я это себе представляю только при помощи "copy" и "pos"Правильно
> представляешь.> пока ничего в голову не приходит кроме как
> линейноТак тебя же никто не торопит)Посиди, подумай, изложи
> мысли на бумаге - и решениес циклом  придет)

Просто я надеялся на подсказочку, собственно говоря озадачивает созможность отсутствия дома, корпуса и парадной в произвольном виде...


 
Сергей М. ©   (2009-11-07 22:02) [7]


> озадачивает созможность отсутствия


Чем озадачивает-то ?

Ну вернет Pos() минус единицу - значит копировать нечего .


 
andrewtitoff ©   (2009-11-07 22:09) [8]


> Сергей М. ©   (07.11.09 22:02) [7]
> > озадачивает созможность отсутствияЧем озадачивает-то ?
> Ну вернет Pos() минус единицу - значит копировать нечего
> .

Ну это с лева, хотя в идеале хотелось бы что бы и название улицы могло отсутствовать, а еще же с права нудно ограничивать то ли до конца исходной строки, то ли до следующего элемента, и вопрос еще до кокого, например как я уже писал "Авангардная д. 20 п. 4"
сначала до дома обрезаем, а потом то как?, ведь корпуса то нет, но парадная то есть...


 
Сергей М. ©   (2009-11-07 22:13) [9]

А порядок следования элементов соблюдается всегда ?


 
andrewtitoff ©   (2009-11-07 22:19) [10]


> Сергей М. ©   (07.11.09 22:13) [9]
> А порядок следования элементов соблюдается всегда ?

Да, строго, изначально эта строка собирается из базы street+" д. "+house+"  к. "+corp+" п. "+paradn


 
andrewtitoff ©   (2009-11-07 22:20) [11]

Собственно говоря изначальна задача стоит такая : http://delphimaster.net/view/2-1257601841/ просто никто не ответил и тему закрыли, и я решил делать так...


 
Сергей М. ©   (2009-11-07 22:23) [12]

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


 
andrewtitoff ©   (2009-11-07 23:41) [13]


> Сергей М. ©   (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;


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

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


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

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


 
andrewtitoff ©   (2009-11-07 23:54) [16]


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

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


 
andrewtitoff ©   (2009-11-07 23:56) [17]


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

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


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


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


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

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


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


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


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

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

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

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


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

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

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

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


 
andrewtitoff ©   (2009-11-08 00:11) [21]

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


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

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

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


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


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

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


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

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

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


 
andrewtitoff ©   (2009-11-08 01:04) [25]


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


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


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

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

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


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

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


 
andrewtitoff ©   (2009-11-08 01:35) [28]


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

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

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


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

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

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


 
andrewtitoff ©   (2009-11-08 01:42) [30]


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

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


 
andrewtitoff ©   (2009-11-08 01:44) [31]


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

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


 
sniknik ©   (2009-11-08 02:16) [32]

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

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

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

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


 
Германн ©   (2009-11-08 02:37) [33]


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

Ключевые слова я выделил.
Так где в представленном варианте решения поиск в базе?
Зачем нужно для поиска в базе вытаскивать на клиента все записи, записывать их в "закодированном" виде, искать на клиенте в комбобоксе строки удовлетворяющие некоторому критерию и раскодировать потом ранее закодированные записи?


 
Anatoly Podgoretsky ©   (2009-11-08 11:03) [34]

> andrewtitoff  (08.11.2009 00:11:21)  [21]

Тогда у вас большой бардак в базе


 
Anatoly Podgoretsky ©   (2009-11-08 11:06) [35]

> Германн  (08.11.2009 02:37:33)  [33]

Еще одна длинная ветка в никуда.


 
sniknik ©   (2009-11-08 12:25) [36]

> Тогда у вас большой бардак в базе
не верю я в это, ведь родная прога с этой базой работает, как-то эти "одинаковые" записи различает... скорее верится в то, что автор отличий не нашел... типа, ну что там за цифирьки (ключь)  вот же по русски одинаковые записи...
(подтверждается тем что он и у себя пытается фильтры реализовать именно по названию, игнорируя ключи, которые должны быть т.к. оригинальная прога "одинаковые" записи как то различает... зациклились :о))


 
andrewtitoff ©   (2009-11-08 12:38) [37]


> Anatoly Podgoretsky ©   (08.11.09 11:03) [34]
> > andrewtitoff  (08.11.2009 00:11:21)  [21]Тогда у вас большой
> бардак в базе

Никакого бардака, так и должно быть, а вы что никогда в одной парадной два лифта не видели?....


> Германн ©   (08.11.09 02:37) [33]

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


> sniknik ©   (08.11.09 02:16) [32]
sniknik ©   (08.11.09 12:25) [36]

Извините конечно, но при всем моем уважении к вашему статусу - Вы говорите полный бред....


 
sniknik ©   (2009-11-08 12:50) [38]

> к вашему статусу - Вы говорите полный бред....
во первых при чем тут статус?

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


 
andrewtitoff ©   (2009-11-08 13:07) [39]


> sniknik ©   (08.11.09 12:50) [38]
> > к вашему статусу - Вы говорите полный бред....во первых
> при чем тут статус?а во вторых этот "бред"  многим очень
> помог, тем кто к нему прислушался... но видимо не каждому
> дано.

Потому что я привык уже на этом форуме почтенно относиться к мастерам т.к. большинство действительно этого заслуживают....
А во вторых вот именно от того бреда который вы мне написали - толку 0...
Что бы не быть голословным:
>это вариант, который "вы" не сумели сделать...
Кто это вам сказал?, какая от этого польна?, помоему это просто попытка оскорбить...
>но вообще комбобоксы не очень удобны при зависимом друг от друга выборе, информация должна быть открытой, длч примера вот так
http://support.amd.com/us/gpudownload/Pages/index.aspx
Ну а кто вам сказал что этот вариант очень удобен?, много адресов все равно не отразите т.к. в базе 7тыс записей.., а вот неопытные пользоматели в этих ваших полях тосно запутаются, да и громоздко это все, это на веб-странице сносно выглядит, в в программе такая огромная форма поиска никчему...., да и не факт что она уместна т.к. форма поиска на отдельном окошке - еще не окончательнвй вариант..., а что если мне в итоге придется где нибудь рядом с основной таблицей в уголке форму поиска делать - мне что такую "дуру" на пол экрана пихать что бы таблици невидно было?....

> sniknik ©   (08.11.09 12:25) [36]
> > Тогда у вас большой бардак в базене верю я в это, ведь
> родная прога с этой базой работает, как-то эти "одинаковые"
> записи различает... скорее верится в то, что автор отличий
> не нашел... типа, ну что там за цифирьки (ключь)  вот же
> по русски одинаковые записи... (подтверждается тем что он
> и у себя пытается фильтры реализовать именно по названию,
>  игнорируя ключи, которые должны быть т.к. оригинальная
> прога "одинаковые" записи как то различает... зациклились
> :о))

Ну а кто Вас сказал что родная прога различает ""Одинаковые" записи"?, кстати кто сказал что записи одинаковые?, покажите?, я сказал только что адреса одинаковые..., и при поиске по адресу родная прога не различает их да и новая не должна различать.....
Вы бы по внимательнее читали, например пост [19]....


 
andrewtitoff ©   (2009-11-08 13:13) [40]

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



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.009 c
1-1231370009
Danco
2009-01-08 02:13
2009.12.27
Как использовать таймер без формы?


2-1257847652
Alex_C
2009-11-10 13:07
2009.12.27
По Handle окна найти окно


15-1256379385
DVM
2009-10-24 14:16
2009.12.27
Посоветуйте как лучше поступить.


3-1231878365
serko
2009-01-13 23:26
2009.12.27
Вместо русских букв вопросительные знаки...


1-1215982046
Stan
2008-07-14 00:47
2009.12.27
Кириллица отображается неверно.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский