На главную Наши проекты:
Журнал   ·   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_
  
> Подключить функцию \ DelphiXE
    Есть функция, вот такого плана:
    ExpandedWrap disabled
      program Project1;
       
      {$APPTYPE CONSOLE}
       
      {$R *.res}
       
      uses
        System.SysUtils,
        System.Character,
        System.RegularExpressions,
        System.Diagnostics;
       
      const
        GTestCount = 1000000;
       
      var
        GTestData: array [0..5] of string;
       
      function _DoScan(
        var P: PChar;
        const ASep: Char;
        const ADigitsCountFrom: Integer;
        const ADigitsCountTo: Integer
      ): Boolean; inline;
      var
        VCount: Integer;
        VDoDetectDigits: Boolean;
      begin
        VCount := 0;
        VDoDetectDigits := (ADigitsCountFrom > 0) or (ADigitsCountTo > 0);
       
        while (P^ <> #0) and (P^ <> ASep) do begin
          if VDoDetectDigits then begin
            if Char(P^).IsDigit then begin
              Inc(VCount);
            end else begin
              Break;
            end;
          end;
          Inc(P);
        end;
       
        Result := (P^ = ASep);
       
        if Result then begin
          if VDoDetectDigits then begin
            Result := (VCount >= ADigitsCountFrom) and (VCount <= ADigitsCountTo);
          end;
          if ASep <> #0 then begin
            Inc(P);
          end;
        end;
      end;
       
      function DoTest: Integer;
      var
        I, J: Integer;
        P: PChar;
        VStopWatch: TStopwatch;
      begin
        Result := 0;
       
        VStopWatch := TStopwatch.StartNew;
       
        for J := 0 to GTestCount - 1 do begin
          for I := 0 to Length(GTestData) - 1 do begin
            P := PChar(GTestData[I]);
            if
              _DoScan(P, '.', 1, 2) and
              _DoScan(P, '.', 1, 2) and
              _DoScan(P, '.', 1, 4) and
              _DoScan(P, ':', 0, 0) and
              _DoScan(P, #0, 1, 6)
            then begin
              Inc(Result);
              //Writeln(GTestData[I]);
            end;
          end;
        end;
       
        Writeln(VStopWatch.ElapsedMilliseconds);
      end;
       
      function DoTestWithRegExpr: Integer;
      var
        I, J: Integer;
        VRegExpt: TRegEx;
        VStopWatch: TStopwatch;
      begin
        Result := 0;
        VRegExpt := TRegEx.Create('\d{1,2}\.\d{1,2}\.\d{1,4}\..*?:\d{1,6}', [roCompiled]);
       
        VStopWatch := TStopwatch.StartNew;
       
        for J := 0 to GTestCount - 1 do begin
          for I := 0 to Length(GTestData) - 1 do begin
            if VRegExpt.IsMatch(GTestData[I]) then begin
              Inc(Result);
              //Writeln(GTestData[I]);
            end;
          end;
        end;
       
        Writeln(VStopWatch.ElapsedMilliseconds);
      end;
       
      begin
        try
          Writeln(DoTest);
          Writeln(DoTestWithRegExpr);
          Readln;
        except
          on E: Exception do
            Writeln(E.ClassName, ': ', E.Message);
        end;
      end.


    Нужно подключить её в код:
    ExpandedWrap disabled
      var
      f, f2: TextFile;
      S: string;
      i: integer;
      ..................
      ReadLn(fall, S);
      // условие - типа фильтра - нужно заменить на функцию, что выше, в теме.
      if (Pos('.', s) > 0)
      and (Pos('.', s) > 0)
      and (Pos('.', s) > 0)
      and (Pos(':', s) > 0) then
        writeln(f2, S);
      ..........................


    Нужна помощь, чего то запутался.... :o
    Сообщение отредактировано: Kirilis2018 -
      Все, разобрался. Задача решена, это консольное приложение. А я чего то напутал с начала...
      Сообщение отредактировано: Kirilis2018 -
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0210 ]   [ 16 queries used ]   [ Generated: 16.04.24, 17:12 GMT ]