Текущий архив: 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.45 MB
Время: 0.008 c