Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Funktion für Entschlüsselung von Dateierweiterung (https://www.delphipraxis.net/58727-funktion-fuer-entschluesselung-von-dateierweiterung.html)

robinWie 11. Dez 2005 18:37


Funktion für Entschlüsselung von Dateierweiterung
 
Hallo,

ich habe heute mal 'ne Function geschrieben die nicht die einfach Dateierweiterung ausgibt sonder wie diese heisst.

Release: 11.12.05
Geschrieben für: Win32 | VCL
Unterstützt 27 Dateitypen
Verwendung: einfach die Function in den Code kopieren und bei z.B. Button1Click eingeben:
Delphi-Quellcode:
 Label1.Caption:=GetFullExt(<Vollständiger Datiname>);
Wenn Ihr wollt könnt ihr noch Dateien Hinzufügen, aber nicht vergessen auc ganz unteneintragen damit die datei nicht doch als "Unbekannt" abgestempelt wird.

Hier die Function
Delphi-Quellcode:
function GetFullExt(const FileName: string): string;
var
  Ext: string;
begin
  Ext:=ExtractFileExt(FileName);
  //Pictures
  if Ext='.jpg' then
    Result:='JPG / JPEG Bild';
  if Ext='.jpeg' then
    Result:='JPG / JPEG Bild';
  if Ext='.JPG' then
    Result:='JPG / JPEG Bild';
  if Ext='.JPEG' then
    Result:='JPG / JPEG Bild';
  if Ext='.ico' then
    Result:='Windows Symbol';
  if Ext='.bmp' then
    Result:='Windows Bitmap';
  if Ext='.gif' then
    Result:='GIF Bild';
  if Ext='.tif' then
    Result:='Windows Foto Format';
  if Ext='.xcf' then
    Result:='GIMP Bild';
  //Texte
  if Ext='.doc' then
    Result:='Microsoft Word Dokument';
  if Ext='.xls' then
    Result:='Microsoft Exel Tabelle';
  if Ext='.txt' then
    Result:='Textdokument';
  if Ext='.rtf' then
    Result:='Rich Text Format';
  //Source
  if Ext='.pas' then
    Result:='Delphi Quellcode';
  if Ext='.dfm' then
    Result:='Delphi Formular Datei';
  if Ext='.dpr' then
    Result:='Delphi Projekt'
  if Ext='.bdsproj' then
    Result:='Borland Developer Studio Project File';
  if Ext='.dcu' then
    Result:='Delphi Compilierte Unit';
  if Ext='.res' then
    Result:='Ressource Datei';
  if Ext='.cs' then
    Result:='C# Source File';
  if Ext='.bat' then
    Result:='Stapelverarbeitungsdatei für MS-DOS';
  //Other Files
  if Ext='.exe' then
    Result:='Ausführbare Datei';
  if Ext='.dll' then
    Result:='Dynamic Link Library / Programmbibliotek';
  if Ext='.eml' then
    Result:='Internet E-Mail Nachricht';
  if Ext='.hlp' then
    Result:='Hilfedatei'
  if Ext='.ini' then
    Result:='Konfigurations einstellung';
  if Ext='.log' then
    Result:='"Logbuch"-Datei';
  if Ext<>'.jpg' then if Ext<>'.jpeg' then if Ext<>'.ico' then
  if Ext<>'.bmp' then if Ext<>'.gif' then if Ext<>'tif' then
  if Ext<>'.JPG' then if Ext<>'.JPEG' then if Ext<>'.doc' then
  if Ext<>'.xls' then if Ext<>'.txt' then if Ext<>'rtf' then
  if Ext<>'.exe' then if Ext<>'.dll' then if Ext<>'.pas' then
  if Ext<>'.dfm' then if Ext<>'.dpr' then if Ext<>'.bdsproj' then
  if Ext<>'.dcu' then if Ext<>'.res' then if Ext<>'.cd' then
  if Ext<>'.bat' then if Ext<>'.xcf' then if Ext<>'.eml' then
  if Ext<>'.hlp' then if Ext<>'.ini' the nif Ext<>'.log' then
    Result:='unbekannte Dateierweiterung';
end;

marabu 11. Dez 2005 19:05

Re: Funktion für Entschlüsselung von Dateierweiterung
 
Hallo Robin,

Microsoft gibt zu Windows ab und an einen Style Guide als Buch heraus. Für das Einbinden von Dateien in Windows ist der 95-er Style Guide maßgebend. Das Buch heißt "Die Windows-Oberfläche - Leitfaden zur Softwaregestaltung" ISBN 3-86063-226-4. Darin ist dann beschrieben, wie man so etwas macht:

Delphi-Quellcode:
uses
  Registry;

function ExtToTypeName(ref: string): string;
var
  reg: TRegistry;
begin
  reg := TRegistry.Create();
  Result := '';
  reg.RootKey := HKEY_CLASSES_ROOT;
  if reg.OpenKeyReadOnly(ref) then
  begin
    Result := reg.ReadString('');
    reg.CloseKey;
    if Pos('.', ref) = 1 then
      Result := ExtToTypeName(Result);
  end;
  reg.Free;
end;
Wenn du diese Routine aufrufst, dann erhältst du für jede registrierte Erweiterung den hinterlegten TypeName.

Delphi-Quellcode:
ShowMessage(ExtToTypeName('.txt'));
Freundliche Grüße vom marabu

robinWie 11. Dez 2005 19:15

Re: Funktion für Entschlüsselung von Dateierweiterung
 
Hab mir schon gedacht das es eine einfachere Variante gibt, danke für den Hinweis. Aber wenn man Dateien bei seiner Anwendung eine eigene bezeichnung geben will kann man meine Function benutzen.

omata 11. Dez 2005 19:17

Re: Funktion für Entschlüsselung von Dateierweiterung
 
Hallo Robin,

Solch eine IF-Verschachtelung ist nicht wirklich sinnvoll und übersichtlich.

Wenn es wirklich mal nicht anders geht, dann mach doch zum Beispiel folgendes...

Delphi-Quellcode:
if A = B then
  Result:=''
else if A = C then
  Result:=''
else if A = D then
  Result:=''
:
:
hier wird nur solange noch weiter verglichen, bis ein Treffer gefunden wurde.

Danke marabu für den Registry-Hinweis, so ist es natürlich am sinnvollsten.

Wenn man aber mal solch eine Struktur wie sie Robin vorgeschlagen hat braucht, dann kann man das etwas eleganter über ein konstantest Array lösen.

Delphi-Quellcode:
type
  TTyp = (tNone, tPictures, tTexte, tSource, tOtherFiles);
  TMyResult = record
                Endung:string;
                Beschreibung:string;
                Typ:TTyp;
              end;


:
:

function GetFullExt(const FileName: string): TMyResult;
type
  TBeschreibung = record
                       A:string[7];
                       B:TTyp;
                       C:string;
                     end;
const
  INFOS:array[1..25] of TBeschreibung = (
    (A: 'jpg';    B:tPictures;  C:'JPG / JPEG Bild'),
    (A: 'jpeg';   B:tPictures;  C:'JPG / JPEG Bild'),
    (A: 'ico';    B:tPictures;  C:'Windows Symbol'),
    (A: 'bmp';    B:tPictures;  C:'Windows Bitmap'),
    (A: 'gif';    B:tPictures;  C:'GIF Bild'),
    (A: 'tif';    B:tPictures;  C:'Windows Foto Format'),
    (A: 'xcf';    B:tPictures;  C:'GIMP Bild'),

    (A: 'doc';    B:tTexte;     C:'Microsoft Word Dokument'),
    (A: 'xls';    B:tTexte;     C:'Microsoft Exel Tabelle'),
    (A: 'txt';    B:tTexte;     C:'Textdokument'),
    (A: 'rtf';    B:tTexte;     C:'Rich Text Format'),

    (A: 'pas';    B:tSource;    C:'Delphi Quellcode'),
    (A: 'dfm';    B:tSource;    C:'Delphi Formular Datei'),
    (A: 'dpr';    B:tSource;    C:'Delphi Projekt'),
    (A: 'bdsproj'; B:tSource;    C:'Borland Developer Studio Project File'),
    (A: 'dcu';    B:tSource;    C:'Delphi Compilierte Unit'),
    (A: 'res';    B:tSource;    C:'Ressource Datei'),
    (A: 'cs';     B:tSource;    C:'C# Source File'),
    (A: 'bat';    B:tSource;    C:'Stapelverarbeitungsdatei für MS-DOS'),

    (A: 'exe';    B:tOtherFiles; C:'Ausführbare Datei'),
    (A: 'dll';    B:tOtherFiles; C:'Dynamic Link Library / Programmbibliotek'),
    (A: 'eml';    B:tOtherFiles; C:'Internet E-Mail Nachricht'),
    (A: 'hlp';    B:tOtherFiles; C:'Hilfedatei'),
    (A: 'ini';    B:tOtherFiles; C:'Konfigurations einstellung'),
    (A: 'log';    B:tOtherFiles; C:'"Logbuch"-Datei')
  );
var
  Ext: string;
  i:integer;
  abbruch:boolean;
begin
  Ext:=lowercase(ExtractFileExt(FileName));
  i:=low(INFOS);
  abbruch:=false;
  while (i <= high(INFOS)) and not abbruch do begin
    abbruch:=(Ext = INFOS[i].A);
    if not abbruch then
      inc(i);
  end;
  if abbruch then begin
    Result.Endung:=INFOS[i].A;
    Result.Typ:=INFOS[i].B;
    Result.Beschreibung:=INFOS[i].C;
  end
  else begin
    Result.Endung:='';
    Result.Typ:=tNone;
    Result.Beschreibung:='unbekannte Dateierweiterung';
  end;
end;
So ist eine Erweiterung noch sehr einfach möglich. Robin bei deinem Beispiel hast du gleich nach dem ersten Typ aufgegeben auch noch gross/klein zu unterscheiden. Bei meinem Vorschlag braucht man nur noch an einer Stelle einmal etwas definieren, dass dann für alle Inhalte im Array gilt.

Naja, ist nur ein Vorschlag.

MfG
Thorsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:23 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