Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   If-Schleifen-Haufen zusammenfassen (https://www.delphipraxis.net/79482-if-schleifen-haufen-zusammenfassen.html)

XeRo 23. Okt 2006 15:21


If-Schleifen-Haufen zusammenfassen
 
Also meine If Schleifen sehen im Moment etwa derartig aus:
Delphi-Quellcode:
if(s='avi')or
(s='mpg')or
(s='mpeg')or
(s='wmf')or
(s=.....)...
Wie kann ich das vernünftiger machen?

Zacherl 23. Okt 2006 15:23

Re: If-Schleifen-Haufen zusammenfassen
 
Hi,

erstmal: if ist kein Schleifen Befehl :wink: ...

Du könntest alle Dateiendungen in einem Array speichern und dann mit dem Operator IN abfragen, ob die Endung enthalten ist.

Florian

Interceptor 23. Okt 2006 15:24

Re: If-Schleifen-Haufen zusammenfassen
 
nen array mit den dateiendungen bauen, danach mit ner for-schleife drübergehn & abfragen?

leddl 23. Okt 2006 15:25

Re: If-Schleifen-Haufen zusammenfassen
 
Zitat:

Zitat von Florian Bernd
Du könntest alle Dateiendungen in einem Array speichern und dann mit dem Operator IN abfragen, ob die Endung enthalten ist.

:shock: Seit wann geht das mit Arrays? :gruebel: AFAIK funktioniert IN nur mit Sets (und die funktionieren AFAIK nicht mit Strings ;)).

Klaus01 23. Okt 2006 15:26

Re: If-Schleifen-Haufen zusammenfassen
 
Zitat:

Zitat von XeRo
Also meine If Schleifen sehen im Moment etwa derartig aus:
Delphi-Quellcode:
if(s='avi')or
(s='mpg')or
(s='mpeg')or
(s='wmf')or
(s=.....)...
Wie kann ich das vernünftiger machen?

Vielleicht so?

Delphi-Quellcode:
var
  FileTypes : set of ['avi','mpg','mpeg','wmf']


if s in FileTypes then
 ...

Grüße
Klaus

Neutral General 23. Okt 2006 15:29

Re: If-Schleifen-Haufen zusammenfassen
 
Sowas geht nicht weil das kein Ordinaltyp ist wie ich letztens auch vom Compiler zu hören bekommen hab-.-^^

Klaus01 23. Okt 2006 15:31

Re: If-Schleifen-Haufen zusammenfassen
 
Danke,

so sollte es aber funktionieren.

Delphi-Quellcode:
var
  FileTypes : set of (avi, mpg, mpeg, wmf)


if s in FileTypes then
...
sorry geht auch so nicht.




Grüße
Klaus

leddl 23. Okt 2006 15:32

Re: If-Schleifen-Haufen zusammenfassen
 
Zitat:

Zitat von Klaus01
so sollte es aber funktionieren.
Delphi-Quellcode:
var
  FileTypes : set of (avi, mpg, mpeg, wmf)
if s in FileTypes then

Dann müßte er aber aus seinem String erstmal den Datentyp machen, wofür er wieder ein if braucht ;)

Die Muhkuh 23. Okt 2006 15:35

Re: If-Schleifen-Haufen zusammenfassen
 
Schau dir mal Delphi-Referenz durchsuchenAnsiIndexText an.

Edit:

Kleines Beispiel:

Delphi-Quellcode:
const
  FileTypes: array [0..4] of string = ('avi', 'mpg', 'mpeg', 'wmf', 'wmv');

procedure Blabla(Ext: String);
begin
  if AnsiIndexText(Ext, FileTypes) > - 1 then
  begin
    // MAch was mit mir :)
  end;
end;

Neutral General 23. Okt 2006 15:35

Re: If-Schleifen-Haufen zusammenfassen
 
Also ich glaube nicht das sowas geht. Wenn es doch ohne großen Aufwand geht dann sagt mir Bescheid. Das wäre für mich eine kleine Sensation :) :firejump:

Klaus01 23. Okt 2006 15:40

Re: If-Schleifen-Haufen zusammenfassen
 
Delphi-Quellcode:
const
  FileType ='avi_mpg_mpeg_wmf';

if pos(s,FileType) <> 0 then
  ...
mein letzter Versuch.

Einen schönen Feierabend.

Grüße
Klaus

XeRo 23. Okt 2006 15:42

Re: If-Schleifen-Haufen zusammenfassen
 
Wow danke für die extrem schnellen antworten!
Besonders Letzte methode gefällt mir!
Vielen dank!

Die Muhkuh 23. Okt 2006 15:43

Re: If-Schleifen-Haufen zusammenfassen
 
Zitat:

Zitat von XeRo
Besonders Letzte methode gefällt mir!

Klaus' oder meine?

dino 23. Okt 2006 15:45

Re: If-Schleifen-Haufen zusammenfassen
 
kann man sich nicht ne boolean Prozedur schreiben, der man den Vergleichswert mit allen Möglichkeiten übergibt ( :kotz: genau), und true rauskriegt, wenn einer der Möglichkeiten= dem Vergleichswert sind...

Die Muhkuh 23. Okt 2006 15:47

Re: If-Schleifen-Haufen zusammenfassen
 
Hi dino,

das sollte wohl kein Problem darstellen:

Delphi-Quellcode:
function InArray(What: String; const Values: Array of String): Boolean;
begin
  Result := AnsiIndexText(What, Values) > - 1;
end;

Cöster 23. Okt 2006 20:18

Re: If-Schleifen-Haufen zusammenfassen
 
Zitat:

Zitat von Klaus01
Delphi-Quellcode:
const
  FileType ='avi_mpg_mpeg_wmf';

if pos(s,FileType) <> 0 then
  ...

Hm, und wenn s = 'i_m'? Ich wage aber zu bezweifeln, dass das schneller ist, als die Methode mit den if-Abfragen. Im Gegenteil. So wie du es mit den if's machst, ist es schon das Beste, alternativ mit der Funktion à la Dino.

semo 23. Okt 2006 20:59

Re: If-Schleifen-Haufen zusammenfassen
 
AnsiIndexText gibts aber noch nicht in delphi5 ...

alternativ erstelle man sich ein array of integer und
eine funktion die man mit dem suchwort füttert, die dann das array durchläuft und den index bw true oder false zurückliefert.

malo 23. Okt 2006 21:22

Re: If-Schleifen-Haufen zusammenfassen
 
Zitat:

Zitat von computer-glossar.de
AnsiIndexText gibts aber noch nicht in delphi5 ...

Dann halt der Haudrauf-Weg.
Delphi-Quellcode:
function InArray(s: string; const StrArray: array of string): boolean;
var i: integer;
begin
result := false;
for i := 0 to high(StrArray)-1 do
begin
  if s=StrArray[i] then
  begin
    result := true;
    break;
  end;
end;
Aufruf wäre etwa so:
Delphi-Quellcode:
const
  FileTypes: array [0..4] of string = ('avi', 'mpg', 'mpeg', 'wmf', 'wmv');
//...
if InArray(s, FileTypes) then DoSomething;
Ist jetzt grob zusammen gezimmert ;)

Lannes 23. Okt 2006 21:23

Re: If-Schleifen-Haufen zusammenfassen
 
Hallo,

oder die Extensionen in eine Stringlist schreiben und dann mit IndexOf prüfen.

semo 23. Okt 2006 21:47

Re: If-Schleifen-Haufen zusammenfassen
 
Delphi-Quellcode:
function InArray(s: string; const StrArray: array of string): boolean;
var
  i: integer;
begin
  result := false;
  for i := 0 to high(StrArray)-1 do
  begin
    if s=StrArray[i] then
    begin
      result := true;
      break;
    end;
  end;
end;
würd ich immer über ne while schleife lösen,
weil break sind nen "no go"
also:
Delphi-Quellcode:
function InArray(s: string; const StrArray: array of string): boolean;
var
  i: integer;
begin
  result := false;
  i     := 0;
  while (not Result) and (i < to high(StrArray)) do
  begin
    result := s=StrArray[i];
    Inc(i);
  end;
end;
und das ganze könnte man dann ja noch um die möglichkeit erweitern auf groß/kleinschreibung zu achten oder nicht
Delphi-Quellcode:
function InArray(s: string; const StrArray: array of string; bCaseSensitiv: Boolean = false): boolean;
var
  i: integer;
begin
  result := false;

  if not bCaseSensitiv then
    s := AnsiUpperCase(s);

  i     := 0;
  while (not Result) and (i < to high(StrArray)) do
  begin
    if bCaseSensitiv then
      result := s=StrArray[i]
    else
      result := s=AnsiUpperCase(StrArray[i]);

    Inc(i);
  end;
end;

Hawkeye219 23. Okt 2006 22:44

Re: If-Schleifen-Haufen zusammenfassen
 
Zitat:

Zitat von computer-glossar.de
[...]weil break sind nen "no go"

Die Anweisung BREAK ist ein sinnvolles Sprachelement, welches - sparsam eingesetzt - zu durchaus lesbarem Code führen kann.

Delphi-Quellcode:
function InArray (const s: string;
                  const A: array of string;
                  CaseSensitive: Boolean = False): Boolean;
var
  i   : integer;
  Same : function (const s1, s2: string): Boolean;
begin
  if CaseSensitive then
    Same := AnsiSameStr
  else
    Same := AnsiSameText;

  Result := False;

  for i := 0 to High(A) do
    if Same(s, A[i]) then
      begin
        Result := True;
        Break;
      end;
end;
Gruß Hawkeye


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