AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

If Anweisungen verkleinern

Ein Thema von youuu · begonnen am 10. Mai 2009 · letzter Beitrag vom 10. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#1

If Anweisungen verkleinern

  Alt 10. Mai 2009, 11:31
Hi,
kann mir jemand einen Tipp geben wie ich diesen Quelltext verkleinern kann.
Ich empfinde diesen Code nicht sonderlich schön.


Delphi-Quellcode:
if Customer_Info[1,28,1] = 'Kleinthen
    Begin
      ComboBoxFirmenG.Items.Add('Mittel');
      ComboBoxFirmenG.Items.Add('Groß');
    End
    Else if Customer_Info[1,28,1] = 'Mittelthen
    Begin
      ComboBoxFirmenG.Items.Add('Klein');
      ComboBoxFirmenG.Items.Add('Groß');
    End
    Else if Customer_Info[1,28,1] = 'Großthen
    Begin
      ComboBoxFirmenG.Items.Add('Klein');
      ComboBoxFirmenG.Items.Add('Mittel');
    End
    Else
    Begin
      ComboBoxFirmenG.Items.Add('Klein');
      ComboBoxFirmenG.Items.Add('Mittel');
      ComboBoxFirmenG.Items.Add('Groß');
    End;
Steven
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: If Anweisungen verkleinern

  Alt 10. Mai 2009, 11:36
du definierst dein Customer-Info nicht als string, sondenr machst eine eigene Enum dafür...
Delphi-Quellcode:
type
  TCustomerInfoSize = (ciSmall, ciMedium, ciLarge)
Oder wie du es eben brauchst

und dann kannst du einfach case...of verwenden:
Delphi-Quellcode:
case Customer_Info[1,28,1] of
  ciSmall: begin ... end;
  ciMedium: begin ... end;
  ciLarge: begin ... end;
end;
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#3

Re: If Anweisungen verkleinern

  Alt 10. Mai 2009, 11:46
Zitat von Meflin:
du definierst dein Customer-Info nicht als string, sondenr machst eine eigene Enum dafür...
Delphi-Quellcode:
type
  TCustomerInfoSize = (ciSmall, ciMedium, ciLarge)
Oder wie du es eben brauchst

und dann kannst du einfach case...of verwenden:
Delphi-Quellcode:
case Customer_Info[1,28,1] of
  ciSmall: begin ... end;
  ciMedium: begin ... end;
  ciLarge: begin ... end;
end;
Im Array Customer-Info sind mehrere Daten gespeichert, als nur die Größe, ich kann also nicht das ganze Array umwandeln.
Oder wie hattest du es gemeint?

Für mich ist das neu, habe damit noch nicht's zu tun gehabt.

Könntest du mir dies einmal zum verstehen erklären?
Steven
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: If Anweisungen verkleinern

  Alt 10. Mai 2009, 11:47
Etwas weniger abstrahiert könntest du auch erst alle Strings hinzufügen und dann mit TStrings.Remove den Inhalt des Felds wieder entfernen (sofern die Combobox vorher leer ist, wovon ich ausgehe).
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#5

Re: If Anweisungen verkleinern

  Alt 10. Mai 2009, 11:51
Habe nun:

Delphi-Quellcode:
type
  TCustomerInfoSize = (ciKlein, ciMittel, ciGroß);

.
.
.

case Customer_Info[1,28,1] of
    ciKlein: begin
      ComboBoxFirmenG.Items.Add('Mittel');
      ComboBoxFirmenG.Items.Add('Groß');
    end;
    ciMittel: begin
      ComboBoxFirmenG.Items.Add('Klein');
      ComboBoxFirmenG.Items.Add('Groß');
    end;
    ciGroß: begin
      ComboBoxFirmenG.Items.Add('Klein');
      ComboBoxFirmenG.Items.Add('Mittel');
    end;
end;
Alleridngs kommt da: "Inkompatible Typen: Integer und TCustomerInfoSize"
Steven
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#6

Re: If Anweisungen verkleinern

  Alt 10. Mai 2009, 11:53
Du hast dein array Customer-Info (wie das genau aussieht kann man ja nur raten, ich vermute mal hier wären records eh angebrachter als ein 3-Dimensionales array aber egal, in diesem array gibt es eine "Spalte" in der du offensichtlich die strings "Klein", "Mittel" und "Groß" speicherst.

Das machst du nun nicht mehr, sondern speicherst in dieser Spalte den Wert ciSmall usw.

Und da es den Typ ciSmall noch nicht gibt, musst du ihn definieren, mit hilfe einer Enumeration. Syntax steht ja in meinem ersten Beitrag.

Wie gesagt, höchstwahrscheinlich wäre aber sowas in der Art eh besser:

Delphi-Quellcode:
TCustomerInfoSize = (ciSmall, ciMedium, ciLarge);

TCustomerInfo = record
begin
  Size: TCustomerInfoSize;
  ... // deine sonstigen Customer Infos
end;

CustomerInfos = array of TCustomerInfo;
ist doch viel schöner, als ein 3-Dimensionales array, in dem auch noch alles unnötigerweise als string gespeichert wird
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#7

Re: If Anweisungen verkleinern

  Alt 10. Mai 2009, 11:56
Zitat von youuu:
Alleridngs kommt da: "Inkompatible Typen: Integer und TCustomerInfoSize"
Wo denn? Beim case...of? Dann hast du im array nicht den richtigen Datentyp (TCustomerInfoSize) verwendet.
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#8

Re: If Anweisungen verkleinern

  Alt 10. Mai 2009, 12:00
Ich habe es so bis jetzt gehabt:

Delphi-Quellcode:
customer_info: array [0..10, 0..40] of string;

QueryCustomer.SQL.Text:='SELECT * FROM `'+Table_Info[5,1]+'` WHERE customer_company_name='''+FormMain.StringGridKunden.Cells[0,selectedRow]+'''';
QueryCustomer.Open;
for i := 0 to StrToInt(Table_Info[5,2]) - 1 do
  Customer_Info[1,i, 1] := QueryCustomer.Fields[i].Asstring;
QueryCustomer.Close;
Wobei im Array
[a,b]

a = Die verschiedenen Tabellen Daten 1: Customer
b = verschiedenen Einträge der Tabellen



Habe es wieder in 2 Dimensional geändert, da 3 Dimensional überflüssig wurde und ich vergessen hatte es zu ändern.
Steven
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#9

Re: If Anweisungen verkleinern

  Alt 10. Mai 2009, 12:10
Schritt 0: Deklaration der Aufzählungstypen und eines Sets:

Delphi-Quellcode:
type
  TSize = (ciKlein, ciMittel, ciGroß);
  TSizes = set of TSize;
var
  Sizes: TSizes;
Schritt 1: Mapping von String auf den Aufzählungstyp, in Set aufnehmen

Delphi-Quellcode:
if Customer_Info[1,28,1] = 'Kleinthen
  Include(Sizes, ciKlein)
else if Customer_Info[1,28,1] = 'Mittelthen
  Include(Sizes, ciMittel)
else if Customer_Info[1,28,1] = 'Großthen
  Include(Sizes, ciGroß);
Schritt 2: ein, zwei oder drei Items der Stringlist hinzufügen

Delphi-Quellcode:
if not (ciKlein in Sizes) then
  ComboBoxFirmenG.Items.Add('Klein');

if not (ciMittel in Sizes) then
  ComboBoxFirmenG.Items.Add('Mittel');

if not (ciGroß in Sizes) then
  ComboBoxFirmenG.Items.Add('Groß');
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#10

Re: If Anweisungen verkleinern

  Alt 10. Mai 2009, 12:18
wobei ich dann, aber wieder genauso viel Text besitze und der Code nicht wirklich kleiner geworden ist?
Oder Irre ich mich?

Delphi-Quellcode:
ComboBoxFirmenG.Text := Customer_Info[1,28];

  if Customer_Info[1,28] = 'Kleinthen
    Include(Sizes, ciKlein)
  else if Customer_Info[1,28] = 'Mittelthen
    Include(Sizes, ciMittel)
  else if Customer_Info[1,28] = 'Großthen
    Include(Sizes, ciGroß);


  if ciKlein in Sizes then
  Begin
    ComboBoxFirmenG.Items.Add('Mittel');
    ComboBoxFirmenG.Items.Add('Groß');
  End
  Else if ciMittel in Sizes then
  Begin
    ComboBoxFirmenG.Items.Add('Klein');
    ComboBoxFirmenG.Items.Add('Groß');
  End
  Else if ciGroß in Sizes then
  Begin
    ComboBoxFirmenG.Items.Add('Klein');
    ComboBoxFirmenG.Items.Add('Mittel');
  End
  Else
  Begin
    ComboBoxFirmenG.Items.Add('Klein');
    ComboBoxFirmenG.Items.Add('Mittel');
    ComboBoxFirmenG.Items.Add('Groß')
  End;
Denn es sollen ja die Items geadded werden die nicht im Feld "Customer_Info[1,28]" gespeichert sind.

Und somit habe ich wieder die nervigen If Anweisungen
Steven
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:46 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