![]() |
If-Anweisung mit "in"
Hallo,
ich habe folgende If-Anweisung:
Code:
Die Variable "DateiEndung" ist vom Typ String;
If DateiEndung in ['jpg', 'jpeg', 'bmp', 'ico', 'emf', 'wmf'] then
{ ... } 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 .....
|
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 |
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:
Trotzdem hängt der an der If-Anweisung mit dem Integer und String - Fehler
//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; genauer gesagt am ersten Komma nach 'jpg'. |
Re: If-Anweisung mit "in"
Zitat:
...:cat:... |
Re: If-Anweisung mit "in"
oki - Danke Sakura
muss ich es doch mit Or machen!! |
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:
Die Funktion liefert den Index von aStr, wenn es im Array strArr enthalten ist, sonst -1. Damit könnte man statt
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;
Delphi-Quellcode:
Folgendes schreiben:
If (DateiEndung = 'jpg') or (DateiEndung = 'jpeg') or .....
Delphi-Quellcode:
Die Variable Endungen muss in diesem Fall ein Array of string sein, indem die Dateiendungen, nach denen gesucht werden soll, enthalten sind.If (StrIdx(DateiEndung, Endungen)>=0) then begin //mache irgendwas ... end; |
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:
...:cat:...
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; |
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