Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.013 c
15-1140990334
Volf_555
2006-02-27 00:45
2006.03.19
Какой есть чат для локальной сети наподобие аськи?


3-1138610374
вп
2006-01-30 11:39
2006.03.19
Инкрементальный бэкап в FireBird 2.0


15-1140637091
Некто
2006-02-22 22:38
2006.03.19
Перепрошил БИОС материнской платы. Теперь проблема.


1-1140182772
lis1985
2006-02-17 16:26
2006.03.19
Динамические звенья


15-1139874209
Википед
2006-02-14 02:43
2006.03.19
Можно ли где нибудь получить аналог Википедии под свои нужды?





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