Главная страница
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.02 c
9-44536
Shadow
2003-01-26 20:45
2003.07.14
Как нарисовать изометрическую сетку?


14-44869
LinOS
2003-06-26 07:47
2003.07.14
Плодимся и размножаемся.


1-44700
elf
2003-06-25 22:40
2003.07.14
Как создать элемент


14-44870
Bill
2003-06-27 12:27
2003.07.14
Преобразование строки в математическое выражение


14-44807
kaif
2003-06-12 23:34
2003.07.14
---|Ветка была без названия|---