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

Вниз

Нормализовать строку   Найти похожие ветки 

 
weeeeee   (2006-10-15 11:30) [0]

Есть необходимость привести некую строку к нормальному виду, под нормальным видом я понимаю слудующее:
"ЭЙ каКДела  вА    дм ИНи стрАЦ ии" = "эйкакделавадминистрации", -- правая часть этого выражения "нормализованная".
Сделал таким образом, но может, не рационально? Что подскажете?

MyString -- источник.
 MyString := LowerCase(MyString);
 while Pos(" ", MyString) <> 0 do
   Delete(MyString, Pos(" ", MyString), 1);
 Result := MyString;


 
Рамиль ©   (2006-10-15 12:02) [1]

Должно быть AnsiLowerCase

А само удаление, наверное, будет быстрее если копировать в другую строку (предварительно сделав SetLength и вызвать повторно в конце, посчитав количество перенесенных символов)


 
weeeeee   (2006-10-15 12:44) [2]

Спасибо! Но второе я что-то совесем плохо воспринял, можно кусочком кода?, если возможно.


 
Рамиль ©   (2006-10-15 14:20) [3]

типа такого

function DeleteSpaces(const Value: string): string;
var
 Counter, i: integer;
begin
 Counter := 0;
 SetLength(Result, Length(Value));
 for i := 1 to Length(Value) do
   if Value[i] <> " " then
   begin
      inc(Counter);
      Result[Counter] := Value[i];
   end;
 SetLength(Result, Counter);
end;


 
Loginov Dmitry ©   (2006-10-15 14:33) [4]

Result := AnsiLowerCase(StringReplace(Str, " ", "", [rfRelpaceAll]));


 
Virgo_Style ©   (2006-10-15 14:44) [5]

Рамиль ©   (15.10.06 12:02) [1]
А само удаление, наверное, будет быстрее если копировать в другую строку


А, собственно, зачем в другую?


 
weeeeee   (2006-10-15 15:30) [6]

А что в данном случае бует работать быстрее: StringReplace или DeleteSpaces?


 
Рамиль ©   (2006-10-15 15:44) [7]


> А, собственно, зачем в другую?

А как? Кадый раз переносить конец строки?


> А что в данном случае бует работать быстрее: StringReplace
> или DeleteSpaces?

Я не дождался конца работы StringReplace что бы сравнить:

var
 a, b: string;
 t, i: integer;
begin
 b := "ghk bdf fr";
 setlength(a, 1000000);
 for i:= 1 to 1000000 do
   a[i] := b[random(9) + 1];
 t := GetTickCount;
 DeleteSpaces(a);
 ShowMessage(IntToStr(GetTickCount - t));
 t := GetTickCount;
 StringReplace(a, " ", "", [rfReplaceAll]);
 ShowMessage(IntToStr(GetTickCount - t));
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.142 c
15-1160216600
Terb
2006-10-07 14:23
2006.10.29
Проблема с подключением к инету, через dialup


15-1160119326
Loginov Dmitry
2006-10-06 11:22
2006.10.29
Задачка (почти пятничная :)


2-1160628341
LaDy-ekat
2006-10-12 08:45
2006.10.29
ADO &amp; Access


15-1159951239
stone
2006-10-04 12:40
2006.10.29
Новые телеканалы


1-1158215092
Mishenka
2006-09-14 10:24
2006.10.29
Как сделать, чтоб в DBGridEh (из EhLib)