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

Вниз

Сравнение строк с ипользованием произвольного символа   Найти похожие ветки 

 
Мшзук   (2003-04-10 05:45) [0]

Приветствую
Вот в чём дело. Надо сравнить строку со всеми строками из листа и оставить только те что подходят к первоначальной строке.
Делаю вот так
for i:=1 to 2 do
If Str1[i]=Str2[i] then

Но не знаю как сделать чтобы если в первоначальной строке введён символ "*" и она выглядит вот так "1*34",
выдрались и 1234 и 1334 и 1434 ну и тд.
Или введя вот такую строку "асса" получить из листа только те строки в которых 1я и 4я, 2я и 3я цифра равны.


 
Мшзук   (2003-04-10 07:48) [1]

Удалено модератором
Примечание: Личная переписка


 
Hooch   (2003-04-10 08:23) [2]

могу предложить довольно тупой но действееный способ :-)))
кидаеш в ClientDataSet нужные записи, потом свойству Filter говориш Filter = "Field like ""1%34"" " и будет сказка :-)


 
Юрий Зотов   (2003-04-10 10:29) [3]

uses
..., Masks;

if MatchesMask(строка, маска)
then ... // строка подходит под маску

==================

procedure SelectStrings(Source, Dest: TStrings; Mask: string);
var
i: integer;
begin
Dest.Clear;
for i := 0 to Source.Count - 1 do
if MatchesMask(Source[i], Mask) then Dest.Add(Source[i])
end;


 
Мшзук   (2003-04-10 15:08) [4]

Я тоже нашёл вот акой способ
Maska:=TMask.Create(Str2);
h:=maska.Matches(copy(str1,1,6));
if h then
List2.Add(str1);

К сожаления в нем как и в способе который предложил Юрий Зотов
есть очень большие недостатки
Во-превых если задать маску x23x, то подойдёт к ней только x23x, а не 1231, 2232 итд, т.е. не строки с одинаковым первым и четвёртым числом.
Во-вторых. К моему большому удивлению
по маске 1*77*1 будт находиться и такие строки 177841, 103771, 177161 и тд. Хотя Даже с первого взгляда ясно что они не подходят под маску.

Кто-нибудь может бъяснить в чём дело, и предложить решение?


 
evvcom   (2003-04-10 15:29) [5]

А ты попробуй вместо маски 1*77*1 маску 1?77?1


 
malkolinge   (2003-04-10 15:41) [6]

* обычно - ЛЮбая последовательность символов, в т.ч и нулевая.


 
Мшзук   (2003-04-10 18:00) [7]

ok
c wildcard разобрался
про вопросы я знал просто хотелось именно с символом "*".
теперь осталось
узнать как надо задать маску чтобы получить одинаковые значения на месте символа в маске, т.е. при маске x23x, подойдёт к ней 1231, 2232, 5235 итд.


 
Юрий Зотов   (2003-04-11 10:34) [8]

> Мшзук (10.04.03 15:08)

> Кто-нибудь может бъяснить в чём дело...
Я могу. В том, что Вы не не знаете масок и не умеете с ними работать.

> ...и предложить решение?
Тоже могу. Надо сесть и 5 минут почитать про маски. Потом перечитать то же самое еще 2 раза (вдумчиво!). А потом еще немного подумать (головой!) и потренироваться (на бумаге!) в написании масок. И тогда не придется бомбить форум детскими вопросами, а потом краснеть за них.


> Мшзук (10.04.03 18:00)

Утверждение 1:
> ok
> c wildcard разобрался

Утверждение 2:
> про вопросы я знал

А теперь - внимание, вопрос. Который начисто опровергает оба этих утверждения:
> как надо задать маску чтобы получить одинаковые значения на
> месте символа в маске, т.е. при маске x23x, подойдёт к ней
> 1231, 2232, 5235 итд.

Ответ:
Как ни удивительно, но маска будет такая: "?23?".

Странно, правда? Особенно, учитывая эти два Ваших утверждения.


 
Мшзук   (2003-04-11 11:46) [9]

<OFFTOP>
Дорогой товарищ Зотов,
правда странно, что вам лень написать ответ на вопрос, но не лень читать мораль незнакомому человеку?
Если вы такой умный то почему бы не ответить на заданый в теме вопрос, вместо нравоучений.
Как видно из первого моего поста я и в правду не знал как использовать маски, но читая хелп и попутно задавая вопросы кое до чего допёр.
Прочитав это в хелпе
Wildcards are asterisks (*) or question marks (?). An asterisk matches any number of characters. A question mark matches a single arbitrary character.
То есть я не мог не знать что "?" как и "*" является wildcard.
Только я не учел что any number of characters значит любая последоватьльнось чисел, а подумал что просто любое число.
А про вдумчивость чтения могу сказать только, что прежде чем отвечать надо вдумчиво прочитать вопрос.
как надо задать маску чтобы получить одинаковые значения на месте символа в маске
Как ни удивительно, но к маске "?23?" кроме 1231,2232 и подобных им чисел, подойдут и 1234,2234 и т.д.
</OFFTOP>

Так вот всё ещё жду ответа на мой вопрос, особенно от Юрия Зотова.


 
Игорь Шевченко   (2003-04-11 12:02) [10]

Мшзук (11.04.03 11:46)

http://ln.com.ua/~openxs/articles/smart-questions-ru.html

(если не трудно - наизусть, плз)


 
Юрий Зотов   (2003-04-11 13:14) [11]

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

Что ж, ОК, раз вопрос все еще ждет ответа (???!!!), тем более, особенно от меня, то продолжим нашу милую беседу.

> Если вы такой умный то почему бы не ответить на заданый в теме
> вопрос, вместо нравоучений

Именно так я с самого начала и поступил. Как только Вы все же хотя бы немного научитесь программировать, так тут же убедитесь, что ответ был точным и исчерпывающим. Если же Вы не сумели его понять или использовать, то это уже другой вопрос и из другой оперы. То же самое касается перевода простейшей конструкции из трех (!!!) английских слов.


> А про вдумчивость чтения могу сказать только, что прежде чем
> отвечать надо вдумчиво прочитать вопрос:
> "как надо задать маску чтобы получить одинаковые значения на
> месте символа в маске"

Увы, придется провести маленький ликбез. С Вашего разрешения.

Строки масок состоят из обычных символов и символов-заменителей. В краткой речи обычные символы принято называть просто "символы", а символы-заменители - "шаблоны". То есть, согласно общепринятой терминологию, в маске "*ab?" на первой и последней позиции стоят ШАБЛОНЫ, а на второй и третьей - СИМВОЛЫ.

Так вот, ВНИМАТЕЛЬНО перечитайте Ваш вопрос с учетом этого маленького ликбеза и УБЕДИТЕСЬ, что и на ЭТОТ вопрос тоже был дан ТОЧНЫЙ ответ.

Совет на будущее - если в какой-либо области Вы не владеете терминологией, то не используйте ее, а говорите простыми русскими словами. А уж если используете терминологию, то используйте ее ТОЧНО. Иначе всегда будет срабатывать правило "каков вопрос - таков ответ" (см. ссылку от Игоря Шевченко).


> Так вот всё ещё жду ответа на мой вопрос, особенно от Юрия
> Зотова.

Что, ж дождались. Но это последний ответ. Для такого простейшего вопроса их и так было слишком много.

Как следует из их описания, обычные маски позволяют проверить НАЛИЧИЕ или ОТСУТСТВИЕ ОДНОГО или НЕСКОЛЬКИХ символов на месте шаблона. Но они не позволяют проверить принадлежность этого символа (или символов) КОНКРЕТНОМУ множеству, а также проверить ОДИНАКОВОСТЬ этих симвлов. Делайте выводы.

Возможно (хотя точно сказать не могу), следует подумать о регулярных выражениях.



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

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

Наверх





Память: 0.49 MB
Время: 0.008 c
3-67092
Stas
2003-04-02 12:34
2003.04.21
Не допустимая закладка


14-67551
Y
2003-04-04 17:51
2003.04.21
Как показать свою вкладку в палитре компонентов?


7-67567
Антон.
2003-02-27 13:17
2003.04.21
Сервисы


8-67402
master_yoda
2002-12-29 14:25
2003.04.21
Морфинг изображений


1-67234
Вася
2003-04-10 10:29
2003.04.21
Консольное приложение и timer





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский