Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#11

Re: Variable suchen und finden

  Alt 24. Okt 2003, 02:01
Diese Methode funktioniert nur wenn die Strings die in deinem Programm nie länger als 255 Zeichen sind.
Da es mit String (AnsiString) nicht funktioniert, wurden diese durch ShortString ersetzt.
Delphi-Quellcode:
  Type subdaten = record
      Case Boolean of
        False: (
          Name: ShortString;
          Exe: ShortString;
          iscategory: Boolean;
          Programm1: ShortString;
          Programm2: ShortString;
          Programm3: ShortString;
          Programm4: ShortString;
          Programm5: ShortString;
          Programm6: ShortString;
          Programm7: ShortString;
          Programm8: ShortString;
          Programm9: ShortString;
          Programm10: ShortString;
          Name1: ShortString;
          Name2: ShortString;
          Name3: ShortString;
          Name4: ShortString;
          Name5: ShortString;
          Name6: ShortString;
          Name7: ShortString;
          Name8: ShortString;
          Name9: ShortString;
          Name10: ShortString);
        True: (
          Name_: ShortString;
          Exe_: ShortString;
          iscategory_: Boolean;
          Programm__: Array[1..10] of ShortString;
          Name__: Array[1..10] of ShortString);
      End;
    datensatz = record
      Case Boolean of
        False: (
          Prog1: subdaten;
          Prog2: subdaten;
          Prog3: subdaten;
          Prog4: subdaten;
          Prog5: subdaten;
          Prog6: subdaten;
          Prog7: subdaten;
          Prog8: subdaten;
          Prog9: subdaten;
          Prog10: subdaten;
          Prog11: subdaten;
          Prog12: subdaten;
          Prog13: subdaten;
          Prog14: subdaten;
          Prog15: subdaten;
          Prog16: subdaten;
          Prog17: subdaten;
          Prog18: subdaten;
          Prog19: subdaten;
          Prog20: subdaten;
          Prog21: subdaten;
          Prog22: subdaten;
          Prog23: subdaten;
          Prog24: subdaten;
          Prog25: subdaten);
        True: (Prog__: Array[1..25] of subdaten);
      End;

  Var daten: datensatz;

  ...

  { liest Text von Label1 ein und schreibt ihn auf Label2}
  daten.Prog14.Programm2 := Label1.Caption;
  Label2.Caption := daten.Prog__[14].Programm__[2];
Deine Variablen-Deklaration wurde einfach mit dieser überlagert. Da die Reihenfolge und Anzahl der Sub-Deklaration identisch sind, liegen somit die selben Variablen übereinander (nutzen den selben Speicherbereich).
Somit ist der "alte" Zugriff und der Zugriff über Array's gleichzeitig möglich.
Ein Beispiel für den Zugriff auf diese Deklaration ist schon im obrigen Code enthalten.
Delphi-Quellcode:
  Type subdaten = record
        Name_: ShortString;
        Exe_: ShortString;
        iscategory_: Boolean;
        Programm__: Array[1..10] of ShortString;
        Name__: Array[1..10] of ShortString;
      End;
    datensatz = record
        Prog__: Array[1..25] of subdaten;
      End;
"_" wurde zur Unterscheidung der alten zur neuen Deklaration eingefügt.


Kleine Erleuterung:
Das kann man gut zur Typen-Umwandlung/-Zerlegung verwenden.
Ich nutze sowas zum Beispiel um eine reelle Variable byteweise in eine Datei zu schreiben und auszulesen.
Delphi-Quellcode:
Var Farbe: Record
  Case Boolean of
    False: (Color: TColor);
    True: (Alpha, Blau, Gruen, Rot: Byte);
  End;

Farbe.Alpha := ...;
Farbe.Blau := ...;
Farbe.Gruen := ...;
Farbe.Rot := ...;
... := Farbe.Color;
************************************************** ***

Besser kommst'e aber wenn du doch dein Prog umschreibst.
Brauchst doch nur mit Suchen & Ersetzen drüber rauschen und dann noch die Deklaration auszutauchen.
Delphi-Quellcode:
  Var daten: Array[1..25] of record
      Name: String;
      Exe: String;
      iscategory: Boolean;
      Programm: Array[1..10] of String;
      ProgName: Array[1..10] of String;
    End;

{für's ersetzen}
datenXX => daten[XX]
ProgrammXX => Programm[XX]
NameXX => ProgName[XX]
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat