Einzelnen Beitrag anzeigen

Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: Parsen von Seitenzahlen

  Alt 18. Aug 2012, 12:14
Hab' auch noch einen (mit Syntaxprüfung, allerdings ungetestet) und auch noch eine Frage dazu. Ist es möglich herauszufinden, ob (wie in meinem Fall) der AdobeRader diese Seiten tatsächlich gedruckt hat (Logdatei o.ä.) ?

Delphi-Quellcode:
function TrimAll(const S: string): string;
var
  I: integer;
begin
  Result := S;
  for I := Length(Result) downto 1 do
    if Result[I] = ' then
      Delete(Result, I, 1);
end;

function IsInPrintOrder(const AValue: integer; const ASet: string): boolean;
type
  TStatus = (stWaitForInteger1, stWaitForInteger2, stError,
    stReadyForInteger1, stReadyForInteger2);
var
  Status: TStatus;
  T, T1, T2: string;
  I, I1, I2: integer;
begin
  T1 := '';
  T2 := '';
  Result := false;
  T := TrimAll(ASet) + ';';
  Status := stWaitForInteger1;
  for I := 1 to Length(T) do
    if (Status <> stError) then
    begin
      case Status of
        stWaitForInteger1:
          if T[I] in ['0'..'9'] then
            T1 := T1 + T[I]
          else
            if T[I] = '-then
              Status := stWaitForInteger2
            else
              if T[I] in [',', ';'] then
                Status := stReadyForInteger1
              else
                Status := stError;
        stWaitForInteger2:
          if T[I] in ['0'..'9'] then
            T2 := T2 + T[I]
          else
            if T[I] in [',', ';'] then
              Status := stReadyForInteger2
            else
              Status := stError;
      end;
      case Status of
        stReadyForInteger1:
          if TryStrToInt(T1, I1) then
          begin
            Status := stWaitForInteger1;
            if AValue = I1 then
            begin
              Result := true;
              Break;
            end
            else
              T1 := '';
          end
          else
            Status := stError;
        stReadyForInteger2:
          if TryStrToInt(T1, I1) and TryStrToInt(T2, I2) and (I2 >= I1) then
          begin
            Status := stWaitForInteger1;
            if (AValue >= I1) and (AValue <= I2) then
            begin
              Result := true;
              Break;
            end
            else
            begin
              T1 := '';
              T2 := '';
            end;
          end
          else
            Status := stError;
      end;
    end;
  if Status = stError then
    raise Exception.Create('Invalid Syntax');
end;

end.
  Mit Zitat antworten Zitat