Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.84] |
|
Сообщ.
#1
,
|
|
|
Как найти и выделить в тексте лишние пробелы?
|
Сообщ.
#2
,
|
|
|
Что считать лишними пробелами и что значит - выделить их ?
|
Сообщ.
#3
,
|
|
|
Цитата koder @ выделить в тексте лишние пробелы может удалить? Добавлено если удалить, то вот тебе применительно в TMemo // no comments :) тут и так все ясно. procedure TForm1.Button2Click(Sender: TObject); var x,count:integer; s:string; begin s:=memo1.Lines.Text; while true do begin if pos(' ',s)<=0 then begin break; exit; end; count:=1; x:=pos(' ',s)+1; while s[x+count]=' ' do inc(count); delete(s,x,count); end; memo1.Lines.Text:=s; end; |
Сообщ.
#4
,
|
|
|
Удалить ещё можно функцией Trim.
|
Сообщ.
#5
,
|
|
|
Цитата F1reF0x @ Удалить ещё можно функцией Trim. Trim удаляет только спереди и сзади. Внутри строки (между слов) не удаляет. |
Сообщ.
#6
,
|
|
|
Непонятно, что имеет ввиду автор, но оптимальнее всего будет использовать алгоритм конечных автоматов для подобной задачи...
|
Сообщ.
#7
,
|
|
|
Вот простая функция для удаления лишних пробелов(из нескольких рядом стоящих остается толтько один).
function DropSpace(const Src: String): String; type TState=(stNone,stSpace); var CurrPos: Integer; DestPos: Integer; State: TState; Len: Integer; begin Len := Length(Src); SetLength(Result,Len); if Len=0 then Exit; State := stNone; CurrPos := 1; DestPos := 1; while CurrPos<=Len do begin case State of stNone: begin Result[DestPos] := Src[CurrPos]; if Src[CurrPos]=' ' then State := stSpace; Inc(DestPos); Inc(CurrPos); end; stSpace: begin if Src[CurrPos]<>' ' then begin State := stNone; Continue; end; Inc(CurrPos); end; end; end; SetLength(Result,DestPos-1); end; |
Сообщ.
#8
,
|
|
|
Гм.
Result := StringReplace(Trim(s), ' ', ' ', [rfReplaceAll]) |
Сообщ.
#9
,
|
|
|
Цитата jack128 @ ?? Это к чему? Приведенный код - Result := StringReplace(Trim(s), ' ', ' ', [rfReplaceAll])) - не ведет к нужному результату |
Сообщ.
#10
,
|
|
|
Хм. Да, действительно, прошу прощения.
|
Сообщ.
#11
,
|
|
|
А так:
while bool(pos(' ',s)) do s:=StringReplace(s,' ', ' ', [rfReplaceAll]); |
Сообщ.
#12
,
|
|
|
>P.O.D
Этот вариант будет работать. Очень коротко, в одну строку. В случае, если не требуется скорость, вполне приемлимое решение. |
Сообщ.
#13
,
|
|
|
Цитата Демо @ Непонятно, что имеет ввиду автор, но оптимальнее всего будет использовать алгоритм конечных автоматов для подобной задачи... А выделить в RichEdit же можно, это я и имел ввиду. |
Сообщ.
#14
,
|
|
|
Короче все отвечают на вопрос "как удалить", а нужно "как выделить" Видимо автор имел ввиду, выделить цветом. Эдакие цветные прямоугольнички. |