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

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

String [D6]


serko ©   (2006-03-03 00:01:00) 

Кажется простечкий вопрос но я его не могу просто решить получается очень громостко где я и сам запутываюсь! Может поможете, как сравнить две строки? Пример:
"Колбаса капченая" и "Колбаса капченая (20%)" - это одинаковые строки (в моем случае),  а вот
"Колбаса" и "Колбаса капченая (5%)" - это разные строки.

Очень хороша функция POS, но она делает все эти строки одинаковыми.
Все происходит так:
Pos('Колбаса капченая','Колбаса') не должно равняться 1,
а вот Pos('Колбаса капченая','Колбаса капченая (20%)') должно быть 1.

Почему так проиходит незнаю, так надо наверное!
Посоветуйте тогда другие операторы сравнения или поска строки в строке.


unknown   (2006-03-04 10:06:00) [1]


> serko ©   (03.03.06 23:48) [12]
> До такого и я додумывался, но если в названии "Колбасы"
> попадется "(" то уже не сработает такой код!


Немного дорабатываем код из [7] и все срабатывает :

uses StrUtils;
...
function GetPercents(Src:string;var Digits:integer):double;
var
 x:Integer;
begin
 x:=1;
 while (x>0)and(x<Length(Src)) and (not (Src[x] in ['0'..'9'])) do
 begin
   x:=PosEx('(',Src,x);
   if x>0 then
     Inc(x);
 end;
 Src:=Copy(Src,X,AnsiPos('%',Src)-x);
 Digits:=Length(Src);
 if not TryStrToFloat(Src,Result) then
   Result:=0;
end;


serko   (2006-03-03 23:48:00) [2]


> unknown ©   (03.03.06 01:09) [7]

До такого и я додумывался, но если в названии "Колбасы" попадется "(" то уже не сработает такой код!


unknown   (2006-03-03 11:32:00) [3]


> Desdechado ©   (03.03.06 11:30) [10]
> надо сформулировать признак "отличия" этих кобас


Во-во, а то пока догадаешься весь телепатор поламается :))


Desdechado   (2006-03-03 11:30:00) [4]

а с моей точки зрения вся колбаса одинаковая, и что?
это просто намек, что надо сформулировать признак "отличия" этих кобас


ASoft   (2006-03-03 10:19:00) [5]

Мож, потому что "колбаса к апченая", а не копченая" :) шутю..
А если у Вас используются базы данных, так не легче ли сформировать запрос по колбасе?


Джо   (2006-03-03 01:23:00) [6]

> [2] serko ©   (03.03.06 00:27)
> Почему Pos('Колбаса капченая','Колбаса')=1,

В том-то и дело — НЕвозвращает она "1", не возвращает! :0)

Проверь и убедись сам:
 ShowMessageFmt ('%d',[Pos('Колбаса капченая','Колбаса')])


unknown   (2006-03-03 01:09:00) [7]

serko ©   (03.03.06 00:55) [5]
Убрать эту приставку вообще то легко, но как точно узнать что там 1, 2-х или
3-х значное число?
Так бы сразу и сказал.
function GetPercents(Src:string;var Digits:integer):double;
var
 x:Integer;
begin
 x:=AnsiPos('(',Src)+1;
 Src:=Copy(Src,X,AnsiPos('%',Src)-X);
 Digits:=Length(Src);
 if not TryStrToFloat(Src,Result) then
   Result:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 D:Integer;
 G:Double;
begin
 G:=GetPercents(Edit1.Text,D);
 Caption:=FloatToStrF(G,fffixed,8,2)+' Digits : '+IntToStr(D) ;
end;


serko   (2006-03-03 01:00:00) [8]

А есть что нибудь типа Pos, но поиск последнего попадания подстроки в строке?


serko   (2006-03-03 00:55:00) [9]

Пример StringReplace сделайте.

Убрать эту приставку вообще то легко, но как точно узнать что там 1, 2-х или 3-х значное число?


unknown   (2006-03-03 00:52:00) [10]

Pos выдает № символа, с которого начинается подстрока в строке.
Для данного конкретного случая можно попробовать что-то типа этого:
function GetPercents(S1,S2:string):double;
begin
 S1:=AnsiUpperCase(S1);
 S2:=AnsiUpperCase(S2);
 if AnsiPos(S1,S2)>0 then
   Result:=(Length(S1)/Length(S2))*100
 else
   Result:=0.0;
end;

т.е. вычисляем процент совпадения строк.
А вообще поищи в сети реализацию алгоритма SoundEx


TStas   (2006-03-03 00:30:00) [11]

StringReplace, замените пустой строкой и все


serko   (2006-03-03 00:27:00) [12]

Чесно, я так и знал!

Почему Pos('Колбаса капченая','Колбаса')=1, если строки 'Колбаса капченая' и приблизительно нет в строке 'Колбаса'?

Кароче как мне откринуть приставку ' (20%)' или ' (5%)' или ' (100%)' если она там есть, в каждой строке, без особой мороки?


Джо   (2006-03-03 00:19:00) [13]

Ничего не понял, честно.


Наверх

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