Форум: "Основная";
Текущий архив: 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.03 c