| Autor |
Beitrag |
Bull80
      
Beiträge: 23
mal dies, mal das
|
Verfasst: 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:
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 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 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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 
      
Beiträge: 23
mal dies, mal das
|
Verfasst: 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 
      
Beiträge: 23
mal dies, mal das
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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 
      
Beiträge: 23
mal dies, mal das
|
Verfasst: Mo 09.10.06 14:41
ahhh , hab dich völlig falsch verstanden. du meintest es sicherlich so:
Delphi-Quelltext 1: 2: 3: 4:
| Seek(datei,0); p:=i+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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 09.10.06 14:45
An der Stelle mit p := i+1 hat i doch noch gar keinen Wert, oder? 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Bull80 
      
Beiträge: 23
mal dies, mal das
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 09.10.06 14:48
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Bull80 
      
Beiträge: 23
mal dies, mal das
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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 
      
Beiträge: 23
mal dies, mal das
|
Verfasst: 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 
      
Beiträge: 23
mal dies, mal das
|
Verfasst: 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.
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 inc(p); Read(datei, Buffer[p]); end; 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 
      
Beiträge: 23
mal dies, mal das
|
Verfasst: Mo 09.10.06 15:30
soweit sind keinerlei fehler vorhanden, leider funzt die abfrage der typisierten datei immer noch nicht.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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 
      
Beiträge: 23
mal dies, mal das
|
Verfasst: 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?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Seek(datei,0); p := 0;
while not eof(datei) do begin 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; |
|
|