Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Вниз

Удалить ненужные пробелы   Найти похожие ветки 

 
download   (2004-06-02 03:12) [0]

Уважаемые мастера, подскажите, как удалить ненужные пробелы в тексте, двойные, тройные и т.д.


 
Andy BitOff ©   (2004-06-02 03:22) [1]


a:=0;
repeat
 if (str[a]=" ") and (str[a+1]=" ") then delete(str,a,1)
 inc(a);
until a=Length(str);


 
Andy BitOff ©   (2004-06-02 03:25) [2]

Хотя я сейчас подумал...
По идее, если пробел в конце строки, то исключение на str[a+1] отсюда вывод
str:=Trim(str);


 
default ©   (2004-06-02 03:26) [3]

function DeleteBackspace(const S: String): String;
var
 i, CountBs: Cardinal;
begin
 CountBs := 0;
 SetLength(Result, Length(S));
 for i := 1 to Length(S) do
 if S[i] <> " " then Result[i] := S[i] else Inc(CountBs);
 SetLength(Result, Length(S) - CountBs)
end;


 
default ©   (2004-06-02 03:31) [4]

опс..вот так
function DeleteBackspace(const S: String): String;
var
 i, CountBs, Index: Cardinal;
begin
 CountBs := 0;
 Index := 1;
 SetLength(Result, Length(S));
 for i := 1 to Length(S) do
 if S[i] <> " " then begin
  Result[Index] := S[i];
  Inc(Index)
 end else Inc(CountBs);
 SetLength(Result, Length(S) - CountBs)
end;


 
lyeh ©   (2004-06-02 03:53) [5]

Если пробелы по краям, то Trim()


 
try   (2004-06-02 06:38) [6]

>default ©   (02.06.04 03:31) [4]
Все пробеллы удаляет


 
try   (2004-06-02 06:46) [7]

>Andy BitOff ©   (02.06.04 03:22) [1]
Не правильно работает - проверьте


 
Kair ©   (2004-06-02 06:49) [8]

С потолка (никак не проверено; написал в реальном времени):


while Pos(#32 + #32, S) > 0 do
Delete(S, Pos(#32 + #32, S), 1);


Щас проверю... :)


 
Думкин ©   (2004-06-02 06:54) [9]


> default ©   (02.06.04 03:31) [4]
> опс..вот так

Можно поправить его:

function DeleteBackspace(const S: String): String;
var
 i, CountBs, Index: Cardinal;
 a : boolean;begin
 CountBs := 0;
 Index := 1;
 SetLength(Result, Length(S));
 a := true;
 for i := 1 to Length(S) do
  if (S[i] <> " ")or(a) then begin
   Result[Index] := S[i];
   Inc(Index);
   a := (S[i] <> " ")
  end else Inc(CountBs);
 SetLength(Result, Length(S) - CountBs);
 Result := Trim(Result)
end;


 
Kair ©   (2004-06-02 06:55) [10]

Ага, проверил... Вроде работает...


 
Andy BitOff ©   (2004-06-02 06:56) [11]

Ну хорошо.
Наверно так будет правильнее:

str:=Trim(str);
a:=0;
repeat
if (str[a]=" ") and (str[a+1]=" ") then delete(str,a,1)
else inc(a);
until a=Length(str);


 
jack128 ©   (2004-06-02 06:58) [12]

// удаляет ведущие и ведомые пробелы и заменяет все парные пробелы на один..
fucntion PackString(s: string): string;
var
 LastChar: Char;
 Index, i: Integer;
begin
 LastChar := #32;
 Index := 1;
 SetLength(Result, Length(s));
 for i := 1 to Length(Result) do
 begin
   if (LastChar = #32) and (s[i] = #32) then Continue;
   LastChar := s[i];
   Result[Index] := LastChar;
   inc(Index);
 end;
 if Result[Index - 1] = #32 then Dec(Index);
 SetLength(Result, Index);
end;


зы не тестированно


 
TUser ©   (2004-06-02 06:59) [13]

while pos("  ",input)>0 do
  StringReplace(input,"  "," ",[rfReplaceAll]);


 
Думкин ©   (2004-06-02 07:00) [14]

> Andy BitOff ©   (02.06.04 06:56) [11]

а выйти за границу не боишься?


 
Andy BitOff ©   (2004-06-02 07:03) [15]

Думкин ©   (02.06.04 07:00) [14]
Нет.


 
jack128 ©   (2004-06-02 07:08) [16]


> Andy BitOff ©   (02.06.04 07:03)
> Думкин ©   (02.06.04 07:00) [14]
> Нет.
нечего супер страшного не будет, но не есть сие красиво..
зы помним, что по MyString[Length(MyString)+1] находится завершающий ноль..


 
Думкин ©   (2004-06-02 07:09) [17]

> Andy BitOff ©   (02.06.04 07:03) [15]

Str[0] -?
Str[length(Str)+1] -?


 
Andy BitOff ©   (2004-06-02 07:17) [18]

Str[0] - привычка с ассемблера осталась. Если очень надо, то единичку поставить не сложно. ;)
Str[length(Str)+1] - по умолчанию компилятор не до конца вычисляет условие, поэтому Str[length(Str)+1] никогда не произойдет. Не зря же Trim поставлен.


 
Думкин ©   (2004-06-02 07:20) [19]

> Andy BitOff ©   (02.06.04 07:17) [18]
> Str[length(Str)+1] - по умолчанию компилятор не до конца
вычисляет условие,

оно конечно, но по умолчанию все-таки, в этом случае для переносимости надо в директивы заключать.


 
Andy BitOff ©   (2004-06-02 07:25) [20]

Согласен. =)

Но вопрос звучал;
Уважаемые мастера, подскажите, как удалить ненужные пробелы в тексте, двойные, тройные и т.д.

Я подсказал. Так сказать, направил на путь истинный, а дальше уж ...


 
download   (2004-06-03 03:07) [21]

Большое спасибо. Вы меня очень выручили!


 
Sur   (2004-06-03 10:22) [22]

function DelSpace(const Text: String): String;
var
 P: Integer;
begin
   Result := Text;
   repeat
        P := Pos(" ",Result);
        if P <> 0 then Delete(Result,P,1)
   until P = 0
end;


 
Amoeba ©   (2004-06-03 11:05) [23]

Готовые ф-ии есть в бесплатной с исходниками библиотеке QStrings (если память не изменяет, то они написаны на asm"е).



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

Форум: "Основная";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.047 c
3-1085041421
iddqd
2004-05-20 12:23
2004.06.13
Тормоза с Sybase


1-1085734256
evgen
2004-05-28 12:50
2004.06.13
Как запретить редактировать все столбцы DBgrid кроме одного?


1-1086118292
SergP
2004-06-01 23:31
2004.06.13
With


4-1083948129
Ded Moroz
2004-05-07 20:42
2004.06.13
CallerID


1-1085831723
ltexcimer
2004-05-29 15:55
2004.06.13
case и char





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