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

Вниз

Замена символов   Найти похожие ветки 

 
NeVa   (2003-07-02 00:23) [0]

Добой ночи! Подскажите как в RichEdit найти все места между словами где больше одного пробела и заменить ето все на одиночный пробел?


 
Спрашивающий_   (2003-07-02 02:11) [1]

Ориетируйся на код ниже и напиши свою функцию
Я его быстро набрасал поэтому может где баг и притаился, вообщем я его не тестировал хотя внешне вроде работает собственно я его и проверял на самом коде обрати внимание в нем нет лтшних пробелов
procedure TForm1.Button1Click(Sender: TObject);
var
S,S1:String;
I,J:Integer;
SL:TStringList;
begin
SL:=TStringList.Create;
SL.Text:=RichEdit1.Text;
For I:=0 To SL.Count-1 Do
begin
S:=SL[I];
S1:="";
For J:=1 To Length(S)Do
begin
If (S<>"") and (Pos(" ",S)<>0) Then
begin
If not ((S[J]=" ") and (S[J+1]=" ")) Then
S1:= S1+S[J];
SL[I]:=S1;
end;
end;

end;
RichEdit1.Text:=SL.Text;

end;


 
Спрашивающий_   (2003-07-02 02:16) [2]

Да забыл естественно SL.Free и блок с try finally end добавь


 
Anatoly Podgoretsky ©   (2003-07-02 07:51) [3]

И главное, не забудь, что этот код будет вызывать AV или при включенной проверке диапазонов ошибку времени исполнения.


 
Sha ©   (2003-07-02 10:21) [4]

Anatoly Podgoretsky © (02.07.03 07:51)
Вроде там терминатор должен быть?
Может нормально будет, ноть и неверно :)


 
Anatoly Podgoretsky ©   (2003-07-02 10:39) [5]

Вроде бы когда J = Length и S[J]=" ", то будет обращение к S[J+1], что уже за пределами строки, включи проверку диапазаона и получишь скандал, даже если скандала не получишь, то само по себе это неверно и очень не профессионально!


 
Song ©   (2003-07-02 10:40) [6]

StringReplace(RichEdit1.Lines.Text,#32#32,#32,[rfReplaceAll]);


 
Sha ©   (2003-07-02 11:07) [7]

Anatoly Podgoretsky © (02.07.03 10:39)
И я о том же. В этом случае S[J+1]=#0 (терминатор строки). НО AV НЕ БУДЕТ - память под string выделяется с учетом 2-х байт под терминаторы.
В отношении непроессиональности полностью согласен. В коде есть еще к чему придраться:
- не удаляются первый и последний пробелы,
- проверка If (S<>"") and (Pos(" ",S)<>0) Then в цикле по символам строки, без которой можно легко обойтись, чуть изменив код,
- скорость работы.



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

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

Наверх




Память: 0.48 MB
Время: 0.018 c
1-44692
XobBIT
2003-06-30 17:19
2003.07.14
Как из библиотеки узнать путь до библиотеки?


1-44661
Urvin
2003-07-02 12:10
2003.07.14
Массивы


3-44587
Nikky
2003-06-19 12:40
2003.07.14
Вопрос по использованию midas


14-44840
Юрий Федоров
2003-06-26 17:23
2003.07.14
Перлы горе-переводчика англ. фильмов


14-44881
LinOS
2003-06-27 08:01
2003.07.14
управление другой программой