Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.59.231] |
|
Сообщ.
#1
,
|
|
|
Есть функция, вот такого плана:
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. Нужно подключить её в код: 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); .......................... Нужна помощь, чего то запутался.... |
Сообщ.
#2
,
|
|
|
Все, разобрался. Задача решена, это консольное приложение. А я чего то напутал с начала...
|