Autor Beitrag
Quivadis
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314

UBUNTU 9.04
D2005 PERS, JAVA, D7 Pers.
BeitragVerfasst: Mi 15.10.03 14:22 
Guten Tag,

Ich programmiere zurzeit in Delph6 Personal und habe folgendes Problem:

Ich habe eine Datei in der Messwerte stehen (ist nicht von mir gemacht) die ich in ein Programm einlesen muss. Da ich aber nicht das richtige Format der Datei habe , lese ich sie zeilenweise in einen String ein.

Von diesem eingelesen string nehme ich die ersten 3 Zeichen weg (zeilennummer) und speicher die Zahl in ein Array ab.

ausblenden Delphi-Quelltext
1:
 winkel_x:array[0..600]of string ; // eingelesen Winkelwerte					


Wie bekomme ich aus diesen Array den Wert der String ist als Fließkommazahl zurück?

mit: variable:=strtofloat(Winkel_X[zahl]);
geht es nicht, da kommt in der Variablen nichts an.

tschau Quivadis[/delphi]
inselberg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458



BeitragVerfasst: Mi 15.10.03 15:03 
abgesehn davon das es mit einer liste (tstrings oder was auch immer) eleganter wäre...

überprüfe ob du "," in deinem float hast und ob keine anführenden leerzeichen vorhanden sind (wegTRIMen).

bekommst du denn ne fehlermeldung ... EConvertError ... oder passiert garnichts?

_________________
hans bist du das ?
Quivadis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314

UBUNTU 9.04
D2005 PERS, JAVA, D7 Pers.
BeitragVerfasst: Mi 15.10.03 15:20 
Guten Tag inselberg,

so wie ich es jetzt habe passiert gar nichts.

In der Datei stehen 600 Werte und in einer 2. auch nochmal 600, also insgesammt 1200. Weil ich die Werte bei progammablauf in der Statuszeile ständig anzeigen muss, habe ich den Weg über das Array gewählt.

Mit Tstrings usw. weis ich nicht wie es geht. brauch die zahlewerte zur anzeige und zum rechne.

Tschau Quivadis
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mi 15.10.03 15:34 
Hallo...willkommen im DF.

1. Wenn strings nicht korrekt wären, dann würde 'ne exception kommen, dh. es sind vermutlich richtige 'zahlen' drinne.

2. Du könntest mal debuggen und schauen ob nach der funktion in der 'variable' der richtige wert zu dem string steht.

3. Für die anzeigen brauchst du den string nicht in eine zahl konverten, da du ihn nacher wieder zu einem string konverten müsstest.

4. Wie sehen die strings denn aus?

5. TStrings ist eine abstrakte klassen und kann nicht direkt verwendet werden! Dazu nimmt man TSTringList:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
...
var sl:TStringList;
      F:Single;
begin
  ls:=TStringList.create;
  try
    ls.loadFromFile('c:\zahlen.txt');

    f := strToFloat(ls[0]); // zB.

  finally
    ls.free;
  end;
end;


hilft das weiter?

_________________
mfg.
mâximôv
Quivadis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314

UBUNTU 9.04
D2005 PERS, JAVA, D7 Pers.
BeitragVerfasst: Mi 15.10.03 15:41 
Hallo maximus,

Danke für deine Tipps. Das hilft mir aber auch nicht weiter.
Ich habe schon debuggt und dabei festgestellt das wenn ich den string aus dem Array auslese und in eine andere Varibla schreibe die auch ein String ist , das dort der richtige Wert als String akommt.
Da ich aber eine Zahl für math. Berrechnungen brauche , habe ich auch schon versucht aus diesen string eine Zahl zu machen.
Sobald ich aber strtto float einsetze passiert nichts. Der compiler meckert nicht. Aber mit Hilfe des DEbugers habe ich festgestellt das er aber nichts macht. In der Empfangsvariable steht nur Müll drinn.

Vieleicht kann mir doch noch jemand weiterhelfen, vielen Dank schonmal im vorraus.

Tschau Quivadis
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mi 15.10.03 15:45 
zeig mal den code

_________________
mfg.
mâximôv
Quivadis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314

UBUNTU 9.04
D2005 PERS, JAVA, D7 Pers.
BeitragVerfasst: Mi 15.10.03 15:58 
Hallo maximus,

hier der Code der die Daten einliest. Es 2 Dateien aus dennen die eigelesen werden muss:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
Procedure CamDateiLesen(namex:string;namey:string);
    {Procedure zum einlesen der Kameradaten und Konvertieren}
var i:integer;
    datei:textfile;
    feld:string;      // Eingelesener Original String

begin
   assignFile(datei,namex);
   reset(datei);
   i:=0;
   while not eof(datei) do begin
         readln(datei,feld);
         delete(feld,1,3);    // Zeilennummer löschen
         delete(feld,3,1);    // Punkt Löschen
         insert(',',feld,3);  // Komma einfügen
         winkel_x[i]:=feld;   // neuen Wert in Array als string übergeben
         inc(i);
   end;
   close(datei);

   assignFile(datei,namey);
   reset(datei);
   i:=0;
   while not eof(datei) do begin
         readln(datei,feld);
         delete(feld,1,3);    // Zeilennummer löschen
         delete(feld,3,1);    // Punkt Löschen
         insert(',',feld,3);  // Komma einfügen
         winkel_y[i]:=feld;   // neuen Wert in Array als string übergeben
         inc(i);
   end;
   close(datei);
   WNamex:=namex;
   WNamey:=namey;
end;


Die beiden Array´s wurden Global definiert.

Folgendes funktioniert: ich kann die Werte aus den Arrays anzeigen lasen.

Folgendes geht nicht: ich kann aus den Arrays keine Zahlen machen.

tschau Quivadis
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mi 15.10.03 16:23 
erstmal ein kleiner verbesserungsvorschlag:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
   while not eof(datei) do begin 
         readln(datei,feld); 
         winkel_x[i]:=   stringReplace(copy(feld,4,length(feld)-4),'.',',',[rfReplaceAll]); 
         inc(i); 
   end;


Das das einlesen der string funktioniert glaub ich dir ja...aber zeig doch mal den code, wo du konvertierst.

_________________
mfg.
mâximôv
Quivadis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314

UBUNTU 9.04
D2005 PERS, JAVA, D7 Pers.
BeitragVerfasst: Mi 15.10.03 16:30 
Hallo maximus,

hier die procedure in der ich zur weiteren Berrechnung die Werte aus dem Array brauch.

Die anderen Werte wurden in einer anderen Procedure schon berrechnet.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
procedure TForm_main.SprungClick(Sender: TObject);
{Aussrechnen der Sprungweite
  (letzte Berrechnungen die auf den Werten der Procedure Rechnen beruhen)

 * als letzter Schritt sollen die x, y Koordinaten des Landepunktes berrechnet
   werden }



var AlphaL,BetaL:single;
var zeileLA,zeileLB:integer; //zeilennummern des Landepunktes
     zla,zfa,zlb,zfb:single;
     zla1,zlb1:string[12];

begin
   // Zeilennummer für Landepunkt ermitteln

     zeileLA:=sx1;
     zeileLB:=sy1;

  // Zeilennummer des Landepunktes einlesen und konvertieren in Float

     //wx.Text:=Winkel_X[zeileLA];
      zla1:='45,78';
     zla:=strtofloat(zla1);      //Versuch was zu konvertieren

     wy.Text:=Winkel_y[zeileLB];   //Versuch zu Konvertieren
     zlb:=strtofloat(wy.Text);

  // Zeilennummern des Fixpunkts einlesen und konvertieren in Float

    //zfa:=WLaden(WNamex,zeileFixX);    // ein weiter versuch
    zfb:=strtofloat(Winkel_X[zeileFixY]);

    //zla1:=winkel[zeileFixX].x;

  // Ausrechnen der Sprungweite und restliche Werte ausrechnen

    AlphaL:= alphaF+(zla-zfa);  // Winkel zwischen strecke AB und strecke AL
    BetaL:=  betaf-(zlb-zfb);   // Winkel zwischen strecke AB und strecke BL



  end;


Tschau Quivadis
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mi 15.10.03 16:44 
ausblenden Delphi-Quelltext
1:
2:
 zla1:='45,78'
  zla:=strtofloat(zla1);      //Versuch was zu konvertieren


das geht nicht? muss aber! ...wenn nicht teste mal folgendes:

ausblenden Delphi-Quelltext
1:
showMessage( floatToStr( strToFloat('45,78') ) );					


wenn das nicht geht dann ist dein computer kaputt :wink:

_________________
mfg.
mâximôv
Quivadis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314

UBUNTU 9.04
D2005 PERS, JAVA, D7 Pers.
BeitragVerfasst: Mi 15.10.03 17:02 
Hallo maximus,

Ich brauch folgendes Konstrukt:
ausblenden Delphi-Quelltext
1:
2:
zfa:=strtofloat(Winkel_X[zeileFixX]);
    zfb:=strtofloat(Winkel_Y[zeileFixY]);


Deine Zeile Quelltext geht. Ich habe meine ganzen Versuche noch im quelltext gelassen, weil ich probiert das in denn variablen was ankommt. Dort kommt aber immer noch nichts an.

tschau quivadis
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mi 15.10.03 17:08 
dann teste mal so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
showMessage('A:'+Winkel_X[zeileFixX]+'  B:'+Winkel_Y[zeileFixY]);
zfa:=strtofloat(Winkel_X[zeileFixX]); 
zfb:=strtofloat(Winkel_Y[zeileFixY]);
showMessage('A:'+floatToStr(zfa)+'  B:'+floatToStr(zfb));


und schau was passier!

_________________
mfg.
mâximôv
Quivadis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314

UBUNTU 9.04
D2005 PERS, JAVA, D7 Pers.
BeitragVerfasst: Mi 15.10.03 17:21 
hi maximus,

so sehe ich das sogar vor dem zuweisen schon was drin steht.

also scheint der Debugger nee Macke zu haben, oder er resetet zu schnell das das nicht mitbekommt .

Ich habe immer (siehe grossen Quelltext ) die letzten formeln und die Transformation DEbugt und dabei festgestellt das dort nichts ankommt, deswegen bin ich ganz erstaunt das er doch was macht.

Danke Dir. :P

Ich hoffe mal das das dann auch noch funktioniert wenn ich weiter programmiere und die werte brauche.

Tschau Quivadis
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mi 15.10.03 17:30 
Jaja der gute debugger :? ...nur weil nix kommt heisst das ja nicht, das das programm nix ausgerechnet hat. Das mit den messageboxen ist'n guter trick, wenn man sich nicht auf den debugger verlassen kann oder will.

Als ich mit delphi angefangen hab, hab ich mir immer ein memo ins prog gesetzt, in das ich immer alle schritte protokoliert habe...mittlerweile sind meine vorhersagen was, wie, wo, wann passiert recht präzise sodass ichs nicht mehr brauche :D

_________________
mfg.
mâximôv
Quivadis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314

UBUNTU 9.04
D2005 PERS, JAVA, D7 Pers.
BeitragVerfasst: Mi 15.10.03 17:41 
Hallo maximus,

du hattest recht der Debuger wars. Ich wollte eigentlich nur mitten im Programmieren schauen ob er richtig rechnet und tappe gleich inso eine Falle rein.

Danke dir nochmals.

Man sollte doch nicht dem Debuger trauen(dachte die wären beser geworden).

werde es jetzt immer mit showmsg... usw. machen.

Tschau Quivadis