![]() |
Überprüfen ob String ein korrekter Dateifilter ist
Hallo!
Ich hab schon nach diesem Topic gesucht aber leider noch nix dazu gefunden: Und zwar würde mich es mich interessieren, ob es eine Funktion gibt, die mir überprüft ob eine String ein korrekter Dateifilter ist!? Also wenn z.B. in einem String das folgende steht sollte er TRUE ausspucken:
Code:
Vielen Dank schon mal!
Textdatei (*.txt)|*.txt|Konfigurationsdatei (*.cfg)|*.cfg|Registrierungsschlüssel (*.reg)|*.reg|Protokoll (*.log)|*.log|Informationsdatei (*.nfo)|*.nfo|HTML-Datei (*.html)|*.html|PHP-Datei (*.php)|*.php
mfg Armin |
Re: Überprüfen ob String ein korrekter Dateifilter ist
Tut mir leid, dass ich meine Frage mir selbst so schnell beantworte! Hab mir nämlich grad recht lange Gedanken drüber gemacht und bin zu folgender Funktion gekommen, die ich auch schon getestet habe! Ich bitte euch aber diese Funktion mal auf eventuelle Fehler durchzuschauen, da es doch schon halb vier in der Nacht ist :mrgreen:
Delphi-Quellcode:
Die Funktion prüft nur ob der Titel aus mindestens einem Zeichen besteht und der Dateifilter wie folgt aussieht *.xxx (xxx steht für einen String mit der Mindestlänge von 1). Wenn ihr noch Verbesserungsvorschläge habt, dann könnt ihr die hier posten! Ansonsten bitte ich nen Moderator diesen Thread in die Code-Lib aufzunehmen :mrgreen: thx
function CheckFileExtensions(Extensions: String):Boolean;
var Ext, title, filter, s: String; begin Result := False; Ext := Extensions; while length(Ext) > 0 do begin title := ''; filter := ''; title := copy(Ext, 1, pos('|', Ext)); if (title = '') then begin Result := False; break; end else Result := True; delete(Ext, 1, pos('|', Ext)); if (pos('|', Ext) = 0) then begin filter := Ext; s := copy(filter, 3, length(filter)); if ((filter[1] <> '*') or (filter[2] <>'.') or (length(s) < 1)) then begin Result := False; end else Result := True; break; end else begin filter := copy(Ext, 1, pos('|', Ext) - 1); s := copy(filter, 3, length(filter)); if ((filter[1] <> '*') or (filter[2] <>'.') or (length(s) < 1)) then begin Result := False; break; end else Result := True; delete(Ext, 1, pos('|', Ext)); end; end; end; mfg Armin |
Re: Überprüfen ob String ein korrekter Dateifilter ist
Würde die function noch umbenennen zB. in CheckFileDialogFilter(Filter: String):Boolean oder so.
ist soweit Ok denke ich bis auf:
Delphi-Quellcode:
function CheckFileExtensions(Extensions: String):Boolean;
var Ext, title, filter, s: String; begin Result := False; Ext := Extensions; while length(Ext) > 0 do begin title := ''; filter := ''; title := copy(Ext, 1, pos('|', Ext)); if (title = '') then begin Result := False; break; end else Result := True; delete(Ext, 1, pos('|', Ext)); if (pos('|', Ext) = 0) then begin filter := Ext; s := copy(filter, 3, length(filter)); if Length(Filter) < 1 then begin // <-- ExtensionsStr = 'Textdatei (*.txt)|'; Result := False; // break; // end; // if ((filter[1] <> '*') or (filter[2] <>'.') or (length(s) < 1)) then begin Result := False; end else Result := True; break; end else begin filter := copy(Ext, 1, pos('|', Ext) - 1); s := copy(filter, 3, length(filter)); if ((filter[1] <> '*') or (filter[2] <>'.') or (length(s) < 1)) then begin Result := False; break; end else Result := True; delete(Ext, 1, pos('|', Ext)); end; end; end; |
Re: Überprüfen ob String ein korrekter Dateifilter ist
Das umbenennen ist sinnvoll - Habe die Funktion auch etwas spät in der Nacht geschrieben *gähn*
Wäre ja fast zu nem AccessViolationError gekommen! ;) (Wenn ich nicht die Länge des eigentlichen Filters abfragen würde) // Edit: Hab hier eine komplett funktionierende Version, die ohne Makel sein sollte..
Delphi-Quellcode:
function CheckFileExtensionFilter(Extensions: String):Boolean;
var Ext, title, filter, s: String; begin Result := False; Ext := Extensions; while length(Ext) > 0 do begin title := ''; filter := ''; title := copy(Ext, 1, pos('|', Ext)); if (title = '') then begin Result := False; break; end; delete(Ext, 1, pos('|', Ext)); if (pos('|', Ext) = 0) then begin filter := Ext; s := copy(filter, 3, length(filter)); if Length(Filter) < 1 then begin Result := False; break; end; if ((filter[1] <> '*') or (filter[2] <>'.') or (length(s) < 1)) then begin Result := False; end else Result := True; break; end else begin filter := copy(Ext, 1, pos('|', Ext) - 1); s := copy(filter, 3, length(filter)); if ((filter[1] <> '*') or (filter[2] <>'.') or (length(s) < 1)) then begin Result := False; break; end else Result := True; delete(Ext, 1, pos('|', Ext)); end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 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