На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Поиск лишних пробелов.
    Как найти и выделить в тексте лишние пробелы?
      Что считать лишними пробелами и что значит - выделить их :wall: ?
        Цитата koder @
        выделить в тексте лишние пробелы

        может удалить?

        Добавлено
        если удалить, то вот тебе применительно в TMemo


        ExpandedWrap disabled
          // 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;
        Сообщение отредактировано: tIce -
          Удалить ещё можно функцией Trim.
            Цитата F1reF0x @
            Удалить ещё можно функцией Trim.


            Trim удаляет только спереди и сзади. Внутри строки (между слов) не удаляет.
              Непонятно, что имеет ввиду автор, но оптимальнее всего будет использовать алгоритм конечных автоматов для подобной задачи...
                Вот простая функция для удаления лишних пробелов(из нескольких рядом стоящих остается толтько один).

                ExpandedWrap disabled
                  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;
                  Гм.
                  ExpandedWrap disabled
                    Result := StringReplace(Trim(s), '  ', ' ', [rfReplaceAll])
                  ??
                    Цитата jack128 @
                    ??

                    Это к чему?

                    Приведенный код - Result := StringReplace(Trim(s), ' ', ' ', [rfReplaceAll])) - не ведет к нужному результату ;)
                      Хм. Да, действительно, прошу прощения.
                        А так:
                        ExpandedWrap disabled
                          while bool(pos('  ',s)) do s:=StringReplace(s,'  ', ' ', [rfReplaceAll]);

                        ;)
                          >P.O.D

                          Этот вариант будет работать. Очень коротко, в одну строку.
                          В случае, если не требуется скорость, вполне приемлимое решение. ;)
                            Цитата Демо @
                            Непонятно, что имеет ввиду автор, но оптимальнее всего будет использовать алгоритм конечных автоматов для подобной задачи...

                            А выделить в RichEdit же можно, это я и имел ввиду. :o
                              :)

                              Короче все отвечают на вопрос "как удалить", а нужно "как выделить" :) :) :)
                              Видимо автор имел ввиду, выделить цветом. Эдакие цветные прямоугольнички.
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0561 ]   [ 16 queries used ]   [ Generated: 11.12.24, 03:45 GMT ]