Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.012 c
6-44797
Staraya
2003-05-06 09:09
2003.07.14
Командная строка windows2000


14-44909
INTAARI
2003-06-27 12:33
2003.07.14
Где найти информацию по контрольной сумме 8-бит XOR?


14-44904
Ixion
2003-06-28 03:44
2003.07.14
Идеальная программа для компьютерного клуба


3-44569
RNZ
2003-06-20 12:06
2003.07.14
Как упаковать базу mdb (Microsoft Access Database) ?


3-44606
Rel_
2003-06-21 14:18
2003.07.14
SQL




   Наверх