Главная страница
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.051 c
2-1141154113
opopo
2006-02-28 22:15
2006.03.19
Get Var By Name, получение переменной по имени.


2-1141639332
Dysan
2006-03-06 13:02
2006.03.19
как заменить программе саму себя?


15-1140573830
vidiv
2006-02-22 05:03
2006.03.19
редактор диска или помогите восстановить БИОС


3-1138338734
Андрей К.
2006-01-27 08:12
2006.03.19
хранимая процедура


3-1138268810
VitV
2006-01-26 12:46
2006.03.19
Access+Interbase