Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.19;
Скачать: CL | DM;

Вниз

String   Найти похожие ветки 

 
serko ©   (2006-03-03 00:01) [0]

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

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

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


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

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


 
serko ©   (2006-03-03 00:27) [2]

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

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

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


 
TStas ©   (2006-03-03 00:30) [3]

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


 
unknown ©   (2006-03-03 00:52) [4]

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


 
serko ©   (2006-03-03 00:55) [5]

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

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


 
serko ©   (2006-03-03 01:00) [6]

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


 
unknown ©   (2006-03-03 01:09) [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;


 
Джо ©   (2006-03-03 01:23) [8]

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

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

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


 
ASoft   (2006-03-03 10:19) [9]

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


 
Desdechado ©   (2006-03-03 11:30) [10]

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


 
unknown ©   (2006-03-03 11:32) [11]


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


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


 
serko ©   (2006-03-03 23:48) [12]


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

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


 
unknown ©   (2006-03-04 10:06) [13]


> 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;



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

Текущий архив: 2006.03.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.042 c
1-1140009670
kshin
2006-02-15 16:21
2006.03.19
Можно ли изменять таблицу DMT для класса в runtime?


3-1138026542
SpellCaster
2006-01-23 17:29
2006.03.19
Экспорт данных в SQL скрипт


15-1140891036
TStas
2006-02-25 21:10
2006.03.19
Почему у меня mid файлы не открываются?


4-1135193281
iNBox
2005-12-21 22:28
2006.03.19
Перетаскивание формы на WinApi


15-1140510663
ORMADA
2006-02-21 11:31
2006.03.19
MyToDo-ведение изменений м/у версиями