Главная страница
    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.034 c
4-1084006630
SPeller
2004-05-08 12:57
2004.06.13
Формат ресурсов PE файлов


1-1086167930
Clickmaker
2004-06-02 13:18
2004.06.13
EVariantError = EOleException ?


14-1085429379
syte_ser78
2004-05-25 00:09
2004.06.13
помогите с настройкой phpmyadmin


14-1085575902
oldman
2004-05-26 16:51
2004.06.13
Что-то слабо верится...


1-1085644462
ReNoiZer
2004-05-27 11:54
2004.06.13
Траблы с дебаггером на D7, WindowsXP с SP2 - build 2096





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