function THTMLTables.GetHTMLTable(AUrl:
string; ATableID: Integer):
string;
var
cResult:
string;
//Rückgabewert
cSourceCode:
string;
//HTML-Quelltext
nTablesCount: integer;
//Anzahl vorhandener Tabellen im cSourceCode
nStartOffSet: integer;
//Da fang ich an nach '<table' zu suchen
nEndOffSet: integer;
//Da fang ich an nach '</table>' zu suchen
nTableStartPos: integer;
//Da fängt meine Table an
nTableEndPos: integer;
//...und da hört sie auf
nNextTablePos: integer;
//Start-Position der jeweils nächsten Table
nResultLength: integer;
//Anzahl der Zeichen, die cResult enthält.
nI: integer;
begin
cSourceCode := GetSourceCode(AUrl);
//Eigene Funktion, die mittels TIdHTTP, den Quelltext ausgibt
nTablesCount := TablesCount(cSourceCode, True);
//Eigene Funktion zum zählen der Tables im Quelltext - Das boolsche Argument gibt an, ob der Quelltext validiert werden soll (d.h. wenn true und genausoviele Table-Start-Tags wie End-Tags gibt's ein Ergebnis, ansonsten 0)
//Weiter mit der Initialisierung von Variablen
nStartOffSet := 1;
nTableStartPos := 1;
nTableEndPos := 1;
nNextTablePos := 1;
if (ATableID > 0)
and
(ATableID <= nTablesCount)
then
begin
//Findet die Position von ATableID (1 = Erster Table-Tag, etc.)
for nI := 0
to ATableID-1
do
begin
nTableStartPos := PosEx(tblStartIdentifier, cSourceCode, nStartOffSet);
nStartOffSet := nTableStartPos + Length(tblStartIdentifier);
end;
//Findet den Table-End-Tag
nEndOffSet := nStartOffSet;
while (nNextTablePos <= nTableEndPos)
and
(nNextTablePos <> 0)
do
begin
nNextTablePos := PosEx(tblStartIdentifier, cSourceCode, nStartOffSet);
nStartOffSet := nNextTablePos + Length(tblStartIdentifier);
nTableEndPos := PosEx(tblEndIdentifier, cSourceCode, nEndOffSet);
nEndOffSet := nTableEndPos + Length(tblEndIdentifier);
end;
nResultLength := nTableEndPos - nTableStartPos + Length(tblEndIdentifier);
cResult := Copy(cSourceCode, nTableStartPos, nResultLength);
end;
Result := cResult;
end;