Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Überprüfen ob String ein korrekter Dateifilter ist (https://www.delphipraxis.net/45938-ueberpruefen-ob-string-ein-korrekter-dateifilter-ist.html)

s.h.a.r.k 15. Mai 2005 02:01


Ü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:
Textdatei (*.txt)|*.txt|Konfigurationsdatei (*.cfg)|*.cfg|Registrierungsschlüssel (*.reg)|*.reg|Protokoll (*.log)|*.log|Informationsdatei (*.nfo)|*.nfo|HTML-Datei (*.html)|*.html|PHP-Datei (*.php)|*.php
Vielen Dank schon mal!

mfg Armin

s.h.a.r.k 15. Mai 2005 02:27

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:
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;
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

mfg Armin

turboPASCAL 15. Mai 2005 11:36

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;

s.h.a.r.k 15. Mai 2005 11:50

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 16:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz