Und unter Verwendung von regex wird daraus dann ungefähr so etwas:
Delphi-Quellcode:
PROCEDURE Checkfile(const fn:string);
var
rgx: TRegexpr;
newnumber,oldnumber: integer;
f: textfile;
s: string;
begin
assign(f,fn); reset(f);
rgx:=TRegexpr.Create;
rgx.Expression:='^O(\d{1,5})([+-]|$)';
oldnumber:=0;
while not eof(f) do
begin readln(f,s);
if rgx.exec(s)
then begin
newnumber := StrToInt(rgx.Match[1]);
if newnumber <> oldnumber+1
then Showmessage ('Out of sequence: '+rgx.Match[1]);
oldnumber := newnumber;
end;
end;
rgx.free;
end;
In #5 sagtest du "ist es praktisch immer viel bequemer,
eine Regex Unit einzubinden".
Frage : Welche denn ?
Ich habe versucht das nachzuvollziehen und habe die System.RegularExpressions eingebunden.
Die kennt aber kein "TRegexpr.Create" (aber ein TRegEx.Create, bei dem als Parameter der Suchtext mitgegeben wird).
Sie kennt auch kein "rgx.Match[1]".
Mal unabhängig davon, wird damit nicht das erreicht, was lemomo wollte.
Zum Beispiel kann nicht geprüft werden, ob da vielleicht ein Oxx nicht am Zeilenanfang steht.
Ein weiteres Problem, nämlich Oxx zu finden, bei denen das xx nicht direkt dem "O" folgt wird ebenfalls nicht gelöst.
Aber trotzdem würde ich das gern mal testen, deshalb die Bitte, mal das "eine RegEx
Unit" zu präzisieren. Danke.