Delphi Zelleninhalte einer Tabelle dynamischen Array übergeben

w0nd4bra

Commander
Registriert
März 2008
Beiträge
2.512
Hallo,

ich habe ein Problem mit Stringgrids und zwar stehe ich aufm Schlauch.
Ich weiss nicht mehr weiter, wie ich den Zelleninhalt einer Tabelle einem dynamischen Array übergeben kann. Ich mache sicherlich was verkehrt, deswegen frage ich hier auch nun^^.


hier mein Code:

Code:
procedure TErwartungswert.Button3Click(Sender: TObject);
 var  xi,pxi      : array of array[0..1] of real;
      spalte      : integer;
begin
 setLength(xi,n);
 setLength(pxi,n);
 for spalte:=0 to n do
   begin
    xi[spalte,0]:=StrToFloat(StringGrid1.cells[spalte,0]);
    pxi[spalte,1]:=StrToFloat(StringGrid1.cells[spalte,1]);
   end;

end;

die tabelle besteht aus n Spalten (je nachdem wieviel man benötigt) und aus 3 Zeilen, wovon man 2 editieren kann, letzere benötigt man zur ausgabe ^^

Hoffe mich kann jemand helfen.

Mfg

€: Fehlernachricht vergessen ^^

Project PMathe.exe raised exception class EConvertError with message ''' is not a valid floating point value'. Process stopped. Use Step or Run to continue.
 
Zuletzt bearbeitet:
Ich denke dien Problem werden leere Zellen sein bzw solche, die aus irgendwelchen Gründen keine Zahlen enthalten.

Sillvoll wäre hier zB:

Code:
for spalte:=0 to n do
   begin
    try  
      xi[spalte,0]:=StrToFloat(StringGrid1.cells[spalte,0]);
    except
      xi[spalte,0]:=0;
    end;
    try
      pxi[spalte,1]:=StrToFloat(StringGrid1.cells[spalte,1]);
    except
      pxi[spalte,1]:=0;
    end;
   end;
 
selber fehler, dass das keine floating variable sein soll...

hier ist mal der komplette code von der Unit

Code:
unit UErwartungswert;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids,UStochastik, DBGrids, StdCtrls, ComCtrls;

type
  TErwartungswert = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button3: TButton;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Erwartungswert:TErwartungswert;
  n,i             : integer;

implementation

{$R *.dfm}



procedure TErwartungswert.Button1Click(Sender: TObject);
begin
 n:=n+1;
 Stringgrid1.ColCount:=n;
 Edit1.Text:= IntToStr(n);
end;

procedure TErwartungswert.Button2Click(Sender: TObject);
begin
 n:=n-1;
 Stringgrid1.ColCount:=n;
 Edit1.Text:= IntToStr(n);
 if n<= -1 then
  begin
   showmessage('Werte im negativen Zahlenbereich sind nicht zugelassen!');
   n:=0;
   Edit1.Text:=IntToStr(n);
  end;
end;

procedure TErwartungswert.Button3Click(Sender: TObject);
 var  xi,pxi      : array of array[0..1] of real;
      spalte      : integer;
begin
 setLength(xi,n);
 setLength(pxi,n);
 for spalte:=0 to n do
   begin
    try  
      xi[spalte,0]:=StrToFloat(StringGrid1.cells[spalte,0]);
    except
      xi[spalte,0]:=0;
    end;
    try
      pxi[spalte,1]:=StrToFloat(StringGrid1.cells[spalte,1]);
    except
      pxi[spalte,1]:=0;
    end;
end;

end;

end.

hoffe du kannst mir weiterin tips geben und findest meinen fehler
 
Zuletzt bearbeitet:
"Try ... except ... end" sollte den Fehler abfangen und drauf reagieren. Allerdings wird dir, wenn du das Programm aus Delphi raus startest, der fehler trotzdem angezeigt.
Deswegen mal nur kompilieren und dann losgelöst von Delphi starten.

Wenn du den Fehler vollständig umgehen willst, solltest du vor dem Konvertieren testen, ob das Konvertieren überhaupt funktionieren kann.
 
Ohne deine Delphi-Version zu kennen muss ich raten, aber schau mal ob sie TryStrToFloat (zum Testen) oder StrToFloatDef (um einen Default anzugeben) kennt. Die genaue Beschreibung der Parameter und Rückgabewerte findest du in der Hilfe.
 
Zuletzt bearbeitet: (Deutsche Sprache, schwere Sprache :))
[Error] UErwartungswert.pas(68): There is no overloaded version of 'StrToFloatDef' that can be called with these arguments

das gleiche bei trystrtofloat ^^

€: es funktioniert nicht mal wenn das array n string is ^^
 
Zuletzt bearbeitet:
Zurück
Oben