Autor Beitrag
Bull80
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

mal dies, mal das

BeitragVerfasst: Do 05.10.06 14:51 
hi @ all,
unser projekt ist bis auf eine sache fertig, an dieser hängen wir schon seit tagen fest.
wir haben eine stream datei mit datensätzen siehe : www.bosserver.de/delphi3.gif
es sind die daten der exceldarstellung mit "HzuD","A0", ...,"Ymin".
Wenn wir unser programm starten, dann werden diese daten auch geladen. nun möchten wir gern den eingegeben "G_Wert" (bei dem link als Beispiel 80 in rot angegeben) mit den geladenen daten aus der stream datei an der stelle "Ymin" abgleichen. beispiel: der user gibt bei "G-Wert" 83,4 ein. nun soll die abfrage starten, welche den "Ymin" wert aus der bereits geladenen im hintergrund und nicht angezeigten stream datei abgleicht und feststellt, das es hier der erste wert mit Ymin=83,4 ist. habt ihr eine Lösung? wäre echt ärgerlich, wenn wir aufgrund dessen unser projekt nicht fertigstellen können.

probiert haben wir schon folgendes:

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:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, Menus, ExtCtrls;

  const
  Buffersize =10;
type
  Polsterkurven = record
    hzud, a0, a1, a2, Xmin, Ymin : single;
.........................................................................
.........................................................................
.........................................................................
procedure TForm1.BerechnenClick(Sender: TObject);
var  datensatz: Polsterkurven;
     Buffer: array[0..BufferSize - 1]of Polsterkurven;
     i, p, b: integer;
begin
     //Stat. Flächenlast ermitteln
     Seek(datei,0);
     p:=0;
     b:=p+1;
     hoehe:= StrToFloat (LE_Fallhoehe.Text);
     hzud:= StrToFloat  (LE_HzuD.Text);
     masse:= StrToFloat (LE_Masse.Text);
     gwert := strtofloat  (LE_GWert.Text);
     laenge := StrToInt (LE_Laenge.Text);
     breite := StrToInt (LE_Breite.Text);

  while not eof(datei) do begin //solange lesen, bis die Datei zu Ende ist
     Read(datei, Buffer[p]);
  end;
    for i:=0 to p do begin
      if gwert > datensatz.Ymin  then
          if Gwert - buffer.Ymin <= Gwert - buffer[i+1].Ymin  then
          seek(datei,i);
          LE_Stat2.Text := floattostr(datensatz.Ymin);
    end;
end;


wir bekommen aber leider immer nur den wert "0" auf LE_Stat2.Text ausgegeben! LE_stat2.Text existiert, wollten deswegen jetzt nicht die grafik von www.bosserver.de/delphi3.gif extra neu machen.

hoffentlich kann uns einer helfen. vielen dank allein schon für eure mühe.

gruß
björn+anhang
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 09.10.06 14:30 
Irgendwie scheint der Wert von p doch fest bei 0 zu liegen, oder? Da Ihr den in einer Schleife verwendet, scheint Ihr aber davon auszugehen, dass er das nicht tut. Liegt da der Fehler?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Bull80 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

mal dies, mal das

BeitragVerfasst: Mo 09.10.06 14:30 
ich bin wirklich auf hilfe angewiesen, komme einfach an dieser stelle nicht mehr weiter und hänge schon 4 tage von morgens bis abends dran und hab schon etliche foren durchforstet. hoffe, einer von euch kann mir helfen. es ist die letzte sache in meinem projekt, alles andere steht. würde mich wahnsinnig ärgern, wenn ich aufgrund dessen es nicht schaffe und es ist bestimmt wieder eine ganz simple abfrage.
Bull80 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

mal dies, mal das

BeitragVerfasst: Mo 09.10.06 14:36 
hi christian,
dank dir für deine schnelle antwort. wir sagen mit i=0 das er mit der ersten zeile in der datei anfangen soll und zeile für zeile bis zum ende von p . wenn der gwert in einer bestimmten zeile dem letzten wert der zeile also ymin entspricht bzw. annähernd dann soll er diesen ymin wert in den LE_Stat.Text anzeigen.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 09.10.06 14:39 
p ist immer Null. Das macht keinen Sinn, weil die Schleife dann immer von 0 bis 0 läuft.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Bull80 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

mal dies, mal das

BeitragVerfasst: Mo 09.10.06 14:41 
ahhh , hab dich völlig falsch verstanden. du meintest es sicherlich so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
    //Stat. Flächenlast ermitteln
     Seek(datei,0);
     p:=i+1;
 //    b:=p+1;

allerdings kommt dennoch der wert 0 :-(. muss gerade selber feststellen, das es schwachsinn mit p:=i+1; ist. hast du evtl. einen vorschlag?


Zuletzt bearbeitet von Bull80 am Mo 09.10.06 14:45, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 09.10.06 14:45 
An der Stelle mit p := i+1 hat i doch noch gar keinen Wert, oder? :gruebel:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Bull80 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

mal dies, mal das

BeitragVerfasst: Mo 09.10.06 14:46 
jepp, wir überschneiden uns immer ;). habe mein text vor deinem letzten eben editiert und geschrieben, das es ja völliger schwachsinn ist. hast du evtl. eine möglichkeit für diesen vorgang?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 09.10.06 14:48 
Der Fehler liegt IMHO beim Einlesen der Daten:

ausblenden Delphi-Quelltext
1:
2:
3:
  while not eof(datei) do begin //solange lesen, bis die Datei zu Ende ist
     Read(datei, Buffer[p]);
  end;


Hier schreibst Du die Daten ja immer an dieselbe Stelle in Buffer, weil p nicht geändert wird. Sinnvoller wäre doch sowas:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  
p := -1;
while not eof(datei) do begin //solange lesen, bis die Datei zu Ende ist
     inc(p);
     Read(datei, Buffer[p]);
  end;

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Bull80 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

mal dies, mal das

BeitragVerfasst: Mo 09.10.06 14:53 
das programm verursacht keinerlei fehler und die abfrage scheint auch zu laufen,jedoch erscheint nach wie vor der wert "0" im ausgabe editfeld LE_Stat2
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 09.10.06 14:57 
Dann setz einfach mal ein paar Breakpoints und geh Schrittweise die Zeilen durch, um zu sehen, wo der Fehler liegt.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Bull80 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

mal dies, mal das

BeitragVerfasst: Mo 09.10.06 15:00 
hui, wenn du mir sagen könntest, wie ich das mache? setze mich mit delphi erst seit 2 wochen auseinander. schaue mal eben, was ich darüber finden kann.
Bull80 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

mal dies, mal das

BeitragVerfasst: Mo 09.10.06 15:14 
habe was gefunden, sehe allerdings überhaupt keinen zusammenhang zwischen der fehlermeldung und der stelle, an der das program unterbricht. versuche mal eben mein glück. er meckert über eine variabel und dem speicher-click ereigniss. müsste dir dazu den ganzen quelltext schicken und soviel arbeit will und werde ich dir nicht zumuten, würdest es wahrscheinlich eh nicht machen ;). melde mich dann nochmal.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
     Seek(datei,0);
     p := -1;
     hoehe:= StrToFloat (LE_Fallhoehe.Text);
     hzud:= StrToFloat  (LE_HzuD.Text);
     masse:= StrToFloat (LE_Masse.Text);
     gwert := strtofloat(LE_GWert.Text);
     laenge := StrToInt (LE_Laenge.Text);
     breite := StrToInt (LE_Breite.Text);

  while not eof(datei) do begin //solange lesen, bis die Datei zu Ende ist
     inc(p);
     Read(datei, Buffer[p]);
  end;                                //HIER HÄLT DAS PROGRAM AN UND SAGT
    for i:=0 to p do begin
      if gwert > datensatz.Ymin  then
      if Gwert - buffer[i].Ymin <= Gwert - buffer[i+1].Ymin  then
          seek(datei,i);
          LE_Stat2.Text := floattostr(datensatz.Ymin);
    end;
Bull80 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

mal dies, mal das

BeitragVerfasst: Mo 09.10.06 15:30 
soweit sind keinerlei fehler vorhanden, leider funzt die abfrage der typisierten datei immer noch nicht.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 09.10.06 15:48 
Du kannst beim Einzelschritt ja sehen, was in den einzelnen Variablen drin steht, gibt Dir das Hinweise?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Bull80 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

mal dies, mal das

BeitragVerfasst: Mo 09.10.06 16:09 
die abfrage funzt jetzt und wir bekommen auch einen wert bei LE_Stat2 ausgegeben. wir haben allerdings gemerkt das er immer den letzten wert in der typisierten datei ausgibt, hier zu sehen in der exceltabelle unter "ymin" spalte ganz unten (29,92):
www.bosserver.de/delphi3.gif

wir möchten aber gerne, die abfrage angehalten wird, sobald die variabel gwert am dichtesten ymin wert dran ist. wie können wir das hinbekommen?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
     //Stat. Flächenlast ermitteln
     Seek(datei,0);
     p := 0;

  while not eof(datei) do begin //solange lesen, bis die Datei zu Ende ist
 //    inc(p);
     Read(datei, Buffer[p]);
  end;
    for i:=0 to p do begin
      if gwert > buffer[i].ymin then
      if gwert - buffer[i].Ymin < Gwert - buffer[i+1].Ymin  then
          seek(datei,i);
          LE_Stat2.Text := floattostr(buffer[i].ymin);
  end;