![]() |
Datei Parsen mittels RegExpr
Hallo Gemeinde,
Ich habe ein Updateprogramm geschrieben. Das Funktioniert folgendermaßen : Dem programm wird ein HTTP Link übergeben. Ein Link von einer TXT Datei die geparst werden soll. In der Zeit ist das Programm noch nicht sichtbar. Dannach wird die Datei aufgerufen und geparst. Ich benutze folgenden Code zum parsen und bin der Meinung dass die Lösung einfach nicht sauber ist. Gibt es eine bessere Alternative?
Delphi-Quellcode:
procedure TUpdate.FileParse(strFile : string);
var Datei: TextFile; RegEx : TRegExpr; strZeile : string; intCountDownloads, intMaxDownloads : integer; begin // standart werte zuweisen intCountDownloads := 0; intMaxDownloads := 0; boolExitLoop := false; // RegEx Objekt erzeugen und flags setzen RegEx := TRegExpr.Create; RegEx.ModifierI := true; // datei verbindung erzeugen / handle erzeugen AssignFile(Datei, strFile); // datei öffnen Reset(Datei); // downloads zählen für ProgressBarAll.Max und setzen while not eof(Datei) do begin ReadLn(Datei, strZeile); RegEx.Expression := '^\s*download\s*\".+\"\s*as\s*\".+\"\s*$'; if RegEx.Exec(strZeile) then begin intMaxDownloads := intMaxDownloads+1; end; end; ProgressBarAll.Max := intMaxDownloads; // Datei erneut öffnen (Zeiger Position auf 1 setzen!?) - unsauber! Reset(Datei); // Updatedatei parsen while (not eof(Datei)) and (not boolExitLoop) do begin ReadLn(Datei, strZeile); // create directory RegEx.Expression := '^\s*create\s*directory\s*\"(.+)\"\s*$'; if RegEx.Exec(strZeile) then begin WriteToLog('Script: Create Dir.: ' + RegEx.Match[1]); if not DirectoryExists(RegEx.Match[1]) then begin CreateDir(RegEx.Match[1]); end; end; // down RegEx.Expression := '^\s*down\s*\"(.+)\"\s*as\s*\"(.+)\"\s*$'; if RegEx.Exec(strZeile) then begin WriteToLog('Script: Download File (Invisible)'); try HTTPDownloadFile(RegEx.Match[1],RegEx.Match[2]); except ShowMessage('Error: Download File'); end; end; // download RegEx.Expression := '^\s*download\s*\"(.+)\"\s*as\s*\"(.+)\"\s*$'; if RegEx.Exec(strZeile) then begin WriteToLog('Script: Download File'); if intMaxDownloads > 0 then begin inc(intCountDownloads); LabelFileNummer.Caption := IntToStr(intCountDownloads) + ' / ' + IntToStr(intMaxDownloads); ProgressBarAll.StepIt; end else begin LabelFileNummer.Caption := IntToStr(intCountDownloads); end; try HTTPDownloadFile(RegEx.Match[1],RegEx.Match[2]); except ShowMessage('Error: Download File'); end; end; // exit RegEx.Expression := '^\s*exit\s*$'; if RegEx.Exec(strZeile) then begin WriteToLog('Script: Exit'); boolExitLoop := true; break; end; // open background xy RegEx.Expression := '^\s*set\s*background\s*\"(.+)\"\s*$'; if RegEx.Exec(strZeile) then begin WriteToLog('Script: Set Backgroundimage: ' + RegEx.Match[1]); if FileExists(RegEx.Match[1]) then begin ImageHead.Picture.LoadFromFile(RegEx.Match[1]); end; end; // open background xy RegEx.Expression := '^\s*set\s*visible\s*\"(\d)\"\s*$'; if RegEx.Exec(strZeile) then begin WriteToLog('Script: Set Form Visible: ' + RegEx.Match[1]); if StrToInt(RegEx.Match[1]) > 0 then begin Self.Visible := true; end else begin Self.Visible := false; end; end; // open background xy RegEx.Expression := '^\s*show\s*\"(.+)\"\s*as\s*INFO$'; if RegEx.Exec(strZeile) then begin MessageDlg(RegEx.Match[1],mtInformation, [mbOK], 0); end; end; // Datei schließen CloseFile(Datei); // Falls Exit beim Parsen aufgerufen worden ist... if boolExitLoop then begin Self.CleanUpInstance; // Löscht Temp. Dateien etc Application.Terminate; end; end; Zu Parsen ist folgende Datei :
Code:
Danke euch :)
#!update:script <-------- Dies soll später als Identifikationszeile dienen
// lädt Hintergrundbild herunter (ohne Counter) down "http://xxxxxxxxxxxxxxxxxxxxxxx/media_repository/files/mediakit/thumb_internetcafe_6x3.jpg" as "background.jpg" // zeigt die form an set visible "1" // setzt Hintergrund set background "background.jpg" // erstellt falls es noch nicht existiert ein Verzeichnis create directory "./Download" // Lädt Dateien herunter download "http://real-ttx.xxxxxxxx.de/dir1/dir2/dir3/dir4/dir5/PHP.rar" as "./Download/PHP_TEST.rar" download "http://www.real-ttx.de/xxxx.rar" as "./Download/xxxx.rar" download "http://www.real-ttx.de/yyyy.rar" as "./Download/yyyy.rar.rar" // versteckt form set visible "0" // Zeigt eine Msg Dialog an (als Infobox=Ausrufezeichen) show "Das Update wurde erfolgreich heruntergeladen" as info // Beendet den Updater (am Client) exit |
Re: Datei Parsen mittels RegExpr
Noch eine kleine Frage : Was hat es sich mit der 80 Zeichen Marke die man nicht überschreiten soll auf sich?
Soweit ich weiß sind das die 80 Zeichen eines Terminals ? Aber warum das in der IDE nicht ? Bei einer Ausgabe in das Terminal verstehe ich das, aber so? Gruß, Real-TTX |
Re: Datei Parsen mittels RegExpr
Zitat:
Grüße, Max |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz