Поиск лишних пробелов.
    
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
    ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
  
    Поиск лишних пробелов.
    
  | 
         
         
         
          
           Сообщ.
           #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 
        
      Этот вариант будет работать. Очень коротко, в одну строку. В случае, если не требуется скорость, вполне приемлимое решение.     | 
    
| 
         | 
    |
| 
         | 
      
         Цитата Демо @  Непонятно, что имеет ввиду автор, но оптимальнее всего будет использовать алгоритм конечных автоматов для подобной задачи... А выделить в RichEdit же можно, это я и имел ввиду.     | 
    
| 
         
         
         
          
           Сообщ.
           #14
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
        ![]() Короче все отвечают на вопрос "как удалить", а нужно "как выделить"     ![]() Видимо автор имел ввиду, выделить цветом. Эдакие цветные прямоугольнички.  |