Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.014 c