Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - schreiben in ein File-Of


D. Annies - Mo 30.01.12 08:44
Titel: schreiben in ein File-Of
Hi, Delpher,

ein kleines Prob, weil ich es schon sehr lange nicht mehr gemacht habe:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
Assignfile(afile, 'a1.sta'); Rewrite(afile); j := 0;
  repeat
    j := j+1;
    datensatz.satzart := stringgrid1.cells[0,j];
    datensatz.kstb    := stringgrid1.Cells[1,j];
    datensatz.ksta    := stringgrid1.Cells[2,j];
    datensatz.kstbez  := stringgrid1.Cells[3,j];
    datensatz.ikosten := strtofloat(stringgrid1.Cells[4,j]);
    datensatz.skosten := strtofloat(stringgrid1.Cells[5,j]);
    datensatz.datum   := stringgrid1.Cells[6,j];
    datensatz.sonst   := stringgrid1.Cells[7,j];
    write(afile, datensatz);
  until j = stringgrid1.rowcount-1;
  closefile(afile);
  showmessage('Es wurden ' + inttostr(j) + ' Datensätze geschrieben');


Der Datensatz wird nicht geschrieben, es liegt an den beiden Reals ikosten und skosten. Was ist da los?
Danke, Detlef


mandras - Mo 30.01.12 09:59

Du hast nicht geschrieben was genau passiert, ich vermute aufs erste daß die Zellen beim strtofloat leer sind und deshalb strtofloat nicht funktioniert. Sollte dies der Fall sein versuche es mit strtofloatdef, da kannst Du einen Defaultwert angeben der verwendet wird wenn sich die Zelle nicht in einen Float umwandeln läßz, z.B. weil sie leer ist.


Delete - Mo 30.01.12 10:22

Es wäre auch keine schlechte Idee uns mitzuteilen was das für Datentypen sind in dem Record. Strings kann man so nämlich nicht schreiben, da es nur Zeiger auf einen Speicherbereich sind.


D. Annies - Mo 30.01.12 11:03

Scusi,


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Type  Satz  =  Record
                 satzart  : String [3];
                 kstb     : String [2];
                 ksta     : String [3];
                 kstbez   : String [21];
                 ikosten  : Real;
                 skosten  : Real;
                 datum    : String [6];
                 sonst    : String [45]
               End;


Es ist ein eConvertError: "" ist kein gültiger Gleitkommawert.


mandras - Mo 30.01.12 11:09

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:


Es ist ein eConvertError: "" ist kein gültiger Gleitkommawert.


Ein leerer String kann nicht in ein Float konvertiert werden. Also StrToFloatDef (xxx, 0) verwenden.


D. Annies - Mo 30.01.12 11:16

Hi, Mandras, es war noch etwas anderes:
Die Abbruchbedingung war falsch: stringgrid1.rowcount-1;
Gruß, Detlef