Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi If-Anweisung mit "in" (https://www.delphipraxis.net/38457-if-anweisung-mit.html)

Helmi 19. Jan 2005 19:31


If-Anweisung mit "in"
 
Hallo,

ich habe folgende If-Anweisung:

Code:
If DateiEndung in ['jpg', 'jpeg', 'bmp', 'ico', 'emf', 'wmf'] then
{ ... }
Die Variable "DateiEndung" ist vom Typ String;

Wenn ich das compilieren will, bekomm ich folgende Meldung:
[Fehler] Viewer.pas(233): Inkompatible Typen: 'Integer' und 'String'


Ich will prüfen ob der Inhalt der Variablen "DateiEndung" sich in der Liste befindet.

Was hab ich falsch gemacht, bzw. wie kann man das machen ohne

Code:
If (DateiEndung = 'jpg') or (DateiEndung = 'jpeg') or .....

alcaeus 19. Jan 2005 19:35

Re: If-Anweisung mit "in"
 
Hallo Helmi,

zeig doch bitte mal ein bisschen mehr Code. Die Zeile die du da hast passt, evtl. funktioniert es sonst irgendwo nicht.

Greetz
alcaeus

Helmi 19. Jan 2005 19:38

Re: If-Anweisung mit "in"
 
Also ich weiss zwar nicht was es bringen soll aber bitte hier hast du die zeilen die drüber liegen:

Code:
      //Datei aus der Ordnerliste auslesen
      Datei := Ordnerliste.Strings[neuesBild];

      DateiEndung := StringReplace(ExtractFileExt(Datei), '.', '', [rfReplaceAll]);

      showmessage(Dateiendung);

      If DateiEndung in ['jpg', 'jpeg', 'bmp', 'ico', 'emf', 'wmf'] then
        begin
          //ausgewähltes Image laden
          Image.Picture.LoadFromFile(Ordner + Datei);
        end;
Trotzdem hängt der an der If-Anweisung mit dem Integer und String - Fehler

genauer gesagt am ersten Komma nach 'jpg'.

sakura 19. Jan 2005 19:38

Re: If-Anweisung mit "in"
 
Zitat:

Zitat von alcaeus
Die Zeile die du da hast passt,

Nein, in [set...] geht nicht mit Strings.

...:cat:...

Helmi 19. Jan 2005 19:43

Re: If-Anweisung mit "in"
 
oki - Danke Sakura

muss ich es doch mit Or machen!!

Binärbaum 20. Jan 2005 10:36

Re: If-Anweisung mit "in"
 
Ich hätte da eine Idee, wie man es ohne or hinkriegt. Dafür braucht man aber eine zusätzliche Funktion, die folgendermaßen aussieht:
Delphi-Quellcode:
function StrIdx(aStr: string; strArr: array of string): Integer;
var i: Integer;
begin
 Result:= -1;
 for i:= 0 to High(strArr) do
  if (aStr=strArr[i]) then
  begin
   Result:= i;
   Break;
  end;
end;
Die Funktion liefert den Index von aStr, wenn es im Array strArr enthalten ist, sonst -1. Damit könnte man statt
Delphi-Quellcode:
If (DateiEndung = 'jpg') or (DateiEndung = 'jpeg') or .....
Folgendes schreiben:
Delphi-Quellcode:
 
If (StrIdx(DateiEndung, Endungen)>=0) then begin
  //mache irgendwas
  ...
end;
Die Variable Endungen muss in diesem Fall ein Array of string sein, indem die Dateiendungen, nach denen gesucht werden soll, enthalten sind.

sakura 20. Jan 2005 10:43

Re: If-Anweisung mit "in"
 
Wenn wir schon mal dabei sind, dann trage ich auch gerne meine Lösung vor, wie ich die gerne nutze. In diesem Fall erweitert, da z.B. JPEGs verschiedene Endungen haben können.
Delphi-Quellcode:
type
  // bekannte Dateitypen
  TFileType = (ftUnknown, ftJpg, ftGif, ftBmp);

type
  // Assoziation zw. Dateiendung und Dateitype
  TFileExt = record
    Ext: String[5];
    FileType: TFileType;
  end;

const
  // Liste bekannter Assoziationen
  FILE_TYPES: array[0..4] of TFileExt = (
    (Ext: 'jpg';  FileType: ftJpg),
    (Ext: 'jpe';  FileType: ftJpg),
    (Ext: 'jpeg'; FileType: ftJpg),
    (Ext: 'gif';  FileType: ftGif),
    (Ext: 'bmp';  FileType: ftBmp)
  );

function GetFileType(FileName: String): TFileType;
var
  lExt: String;
  I: Integer;
  Res: TFileType;
begin
  Res := ftUnknown;
  lExt := AnsiLowerCase(ExtractFileExt(FileName));
  for I := Low(FILE_TYPES) to High(FILE_TYPES) do
    if FILE_TYPES[I].Ext = lExt then
    begin
      Res := FILE_TYPES[I].FileType;
      Break;
    end;
  Result := Res;
end;
...:cat:...

Binärbaum 20. Jan 2005 11:22

Re: If-Anweisung mit "in"
 
Die Vorgehensweise von sakura ist auch nicht schlecht, vielleicht sogar besser als mein Vorschlag.
Bei meiner Lösung kann man allerding auch die Dateitypen herausbekommen, da man an Hand des Ergebnisses der Funktion StrIdx ja die Position des Suchstrings im Array erhält und somit auch die Dateiendung.
Welche Variante man nimmt ist also Geschmackssache.

MfG
Binärbaum


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