Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
Delphi 10.4 Sydney
|
AW: Parsen von Seitenzahlen
18. Aug 2012, 13: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.
|
|
Zitat
|