AGB  ·  Datenschutz  ·  Impressum  







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

Array mit verschiedenen Records

Ein Thema von Scrutor · begonnen am 4. Jul 2007 · letzter Beitrag vom 6. Jul 2007
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Array mit verschiedenen Records

  Alt 5. Jul 2007, 08:24
so gehts:
Delphi-Quellcode:
TRec1 = record
   a : char;
   b : char;
end;

TRec2 = record
  c: char;
  d: char;
end;

TRec1or2 = record
  case Bool of
    True: (Variante1: Rec1);
    False: (Variante2: Rec2);
end;

RecArray:Array[0..4]of record;
Dabei ist das Array-Elemente so groß wie der größte Recordtyp - Wenn also TRec1 und TRec2 gleich groß sind wird nicht mehr speicher als normal verbraucht.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Scrutor

Registriert seit: 23. Sep 2006
Ort: Moers
37 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Array mit verschiedenen Records

  Alt 5. Jul 2007, 10:06
Ich hänge nun an folgendem Problem fest:

Delphi-Quellcode:
type
  TDataArray = array[0..4] of variant;

var
  DataArray : TDataArray; // ???

...

  Format:=0;
  CreateDate:=StrToDate(FormatDateTime('dd.mm.yy',GetFileModifyDate(Fread)));
  if CreateDate<StrTodate('22.01.04') then Format:=1;
  if CreateDate<StrTodate('23.07.03') then Format:=2;
  if CreateDate<StrTodate('21.02.02') then Format:=3;
  if CreateDate<StrTodate('27.04.01') then Format:=4;
  if CreateDate<StrTodate('31.10.00') then Format:=5;
  case Format of
    0: begin
         DataArray[0]:=TZeile_1_nach04;
         DataArray[1]:=TZeile_2_nach03;
         ...
         DataArray[4]:=TZeile_5_nach04;
       end;
    1: begin
         DataArray[0]:=TZeile_1_vor04;
         DataArray[1]:=TZeile_2_nach03;
       end;
    2: begin
        DataArray[0]:=TZeile_1_vor04;
        DataArray[1]:=TZeile_2_vor03;
       end
    else
     begin
       ShowMessage('Format wird noch nicht unterstützt.');
       exit;
     end;
  end;

  fStream:=TMemoryStream.Create;
  try
    fStream.LoadFromFile(Fread);
    fStream.ReadBuffer(DataArray[0],SizeOf(DataArray[0]));
    fStream.ReadBuffer(DataArray[1],SizeOf(DataArray[1]));
    fStream.ReadBuffer(DataArray[2],SizeOf(DataArray[2]));
    fStream.ReadBuffer(DataArray[3],SizeOf(DataArray[3]));
    fStream.ReadBuffer(DataArray[4],SizeOf(DataArray[4]));
  finally
    fStream.Free;
  end;
ich weiss nicht, wie ich anders den Datensatz in das array bekomme, um den richtigen datensatz auslesen zu können
90% aller Computerprobleme sitzen vor dem Bildschirm !
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Array mit verschiedenen Records

  Alt 5. Jul 2007, 10:17
Dein Sizeof(DataAray[x]) dürfte unabhängig von x immer 16 liefern. so groß ist eben ein Variant. Und in den 16 Bytes des Variant steht dann der Typ mit dem das Variant derzeit belegt ist und je nach Typ die entspr Daten.

Kann man ein Variant eigentlich mit einem Record direkt füllen?

Edit: Hier ist ja noch einiges anderes schief. DataArray[0]:=TZeile_1_nach04;
Und Recods kann man tatsächlich nicht einem variant zuordnen (Delphi 7).

Den Ansatz solltest du besser wegwerfen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Scrutor

Registriert seit: 23. Sep 2006
Ort: Moers
37 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Array mit verschiedenen Records

  Alt 5. Jul 2007, 10:23
ich bin grad dabei es mit einem array of pointer zu probieren. (learning by doing )

mit sizeof ist mir grad auch schon aufgefallen.

ganz schön verzwickt der scheiss.


edit: der erste ansatz ist schon weg
90% aller Computerprobleme sitzen vor dem Bildschirm !
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#15

Re: Array mit verschiedenen Records

  Alt 5. Jul 2007, 11:13
...also habe ich das richtig verstanden: das Format hängt nur vom Datum der Datei ab?
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Scrutor

Registriert seit: 23. Sep 2006
Ort: Moers
37 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Array mit verschiedenen Records

  Alt 5. Jul 2007, 11:26
richtig Billa,
anhand des erstellungsdatums wähle ich das dafür notwendige format.

nur ich verzweifel grad an der zuweisung


mfg
Scrutor
90% aller Computerprobleme sitzen vor dem Bildschirm !
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#17

Re: Array mit verschiedenen Records

  Alt 5. Jul 2007, 11:30
Warum liest Du nicht - abhängig vom Datum - SizeOf(xxx) Zeichen in einen String, fügst bei den kleineren(älteren?) Sätzen ans Ende des Feldes von AuftrNr mit insert ein Leerzeichen (oder bei numerischen Auftragsnummer am Anfang eine führende Null) ein und benutzt nur EINE Datenstruktur? Sprich: anschließend den String per Typecast oder Move(src,dest,cnt) in die Struktur kopieren Ok...ist nicht gerade schnell, aber das sieht nach einem einmaligen Import aus. Da ist "Speed" wohl nicht so entscheidend.
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Scrutor

Registriert seit: 23. Sep 2006
Ort: Moers
37 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: Array mit verschiedenen Records

  Alt 5. Jul 2007, 11:43
@Billa
weil das doch zu aufwendig wäre meiner meinung nach.
die unterschiede in den formaten sind auch mal mitten in einem record, also nicht immer am ende oder am anfang.
und da dann immer die richtige stelle zu finden ist bestimmt möglich, aber zu umständlich find ich.

ich hab 6 Zeitabfragen und 5 Zeilen, die je nach datum anders aussehen (können).
Delphi-Quellcode:
Zeile1
  Zeile1_1 //Format 1, etc.
  Zeile1_2
  Zeile1_3
  Zeile1_4
  Zeile1_5
  Zeile1_6
Zeile2
  Zeile2_1
  Zeile2_2
  Zeile2_3
  Zeile2_4
  Zeile2_5
  Zeile2_6
90% aller Computerprobleme sitzen vor dem Bildschirm !
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#19

Re: Array mit verschiedenen Records

  Alt 5. Jul 2007, 11:48
..ich finde es relativ einfach je nach Struktur Leerzeichen einzufügen... sowas lässt sich sogar prima über eine Steuerdatei mit der jeweiligen Satzstruktur steuern. Damit ist man dann auch für weitere Formate offen, ohne die "hart" codieren zu müssen. Ändern der Steuerdatei und NICHT neu compilieren. D.h. das funktioniert dann auch beim Kunden oder wenn der Programmierer mal NICHT da ist, Delphi nicht zur Verfügung steht oder, oder, oder.... Aber ok. Ist das ganze denn jetzt ein einmaliger Vorgang?
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Scrutor

Registriert seit: 23. Sep 2006
Ort: Moers
37 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: Array mit verschiedenen Records

  Alt 5. Jul 2007, 11:57
ich programmiere einfach nur ein altes Fortran-Programm in Delphi neu.
und diese Dateiformate sind halt historisch gewachsen.
ich will halt nur, dass man die alten Datensätze auch noch in meinem neuen Programm weiterhin benutzen kann (zumindest laden).
Deswegen ja die Datumsabfrage.

alle datensätze die nach 2004 erstellt wurden, ändern sich vorerst nicht und wenn dann mach ich das dateiformat eh komplett neu.
also ist das mit einer steuerdatei hinfällig.
und da der kunde nur aus 2 leuten besteht (ich bin einer von den 2 ), ist es auch nicht schlimm, wenn der programmierer mal pennt

ich hätte am liebsten nur die aktuellste datei-struktur genommen, aber dann hätte man alle alten sachen (wenn sie denn wiederkommen) komplett neu oder erst mit dem alten Fortran-Programm machen müssen.

also es ist ein einmaliger vorgang



mfg
Scrutor
90% aller Computerprobleme sitzen vor dem Bildschirm !
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 12:55 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