| Autor |
Beitrag |
Bull80
      
Beiträge: 23
mal dies, mal das
|
Verfasst: So 08.10.06 15:38
hi @ all,
folgendes problem. möchte in eine bereits vorhandene streamdatei weitere daten hinzufügen, welche auch nach dem beenden des programs wieder gelöscht werden. der vorhandene inhalt der stream datei sieht wie folgt aus:
42.90 110.50 -217.66 190.58 0.98 83.40
35.75 102.80 -241.46 212.15 1.17 70.37
28.60 95.10 -265.26 233.72 1.39 48.76
21.45 62.69 -194.81 195.68 1.55 44.33
14.30 30.27 -124.35 157.63 2.05 29.92
nun soll z.b. ein weiterer datensatz drangehängt werden, als beispiel:
14.13 28.15 25.66 15.22 12.11 5.66
ich komme wirklich nicht weiter und überall steht was völlig anderes über streamdateien. bitte dringend um hilfe, vielen dank...
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:
| procedure TForm1.NeueKurveClick(Sender: TObject); var Buffer: array[0..BufferSize - 1] of Polsterkurven; i, p: integer; begin Seek(datei,0); p:=0; while not eof(datei) do begin Read(datei, Buffer[p]); inc(p); if p > 9 then exit; end; CloseFile(datei); Buffer[p+1].HZUD:= 0; Buffer[p+1].a0:= 0; Buffer[p+1].a1:= 0; Buffer[p+1].a2:= 0; Buffer[p+1].xmin:= 0; Buffer[p+1].ymin:= 0;
ReWrite(datei); for i:=0 to p do write(datei, Buffer[i]); positionieren(FileSize(datei)-1); end; |
gruß
björn
Moderiert von raziel: Delphi-Tags hinzugefügt
|
|
alias5000
      
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: So 08.10.06 17:43
Wie ist TPolsterkurven deklariert?
Und wo ist jetzt konkret dein Problem? Weil wo willst du in dem Code neue Daten einfügen? Bisher hängst du nur Nullen dran. Und warum darf p nicht 10 werden?
_________________ Programmers never die, they just GOSUB without RETURN
|
|
Bull80 
      
Beiträge: 23
mal dies, mal das
|
Verfasst: So 08.10.06 18:00
dank dir schon jetzt für deine antwort.
polsterkurven = record
p darf nicht 10 werden, weil wir insgesamt nur 9 datensätze einbinden sollen. meine damit also insgesamt 9 zeilen soll die streamdatei enthalten. ich weiss absolut nicht, wie ich an die bereits vorhandenen datensätze in der streamdatei neue am ende dran setze bis ich halt insgesamt 9 zeilen erreicht habe.
eine grafik über den aufbau unseres projektes findest hier : www.bosserver.de/delphi3.gif ganz unten bezieht sich der streamteil drauf!
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: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249:
| 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; end; TForm1 = class(TForm) TabSheet1: TTabSheet; TabSheet2: TTabSheet; TabSheet3: TTabSheet; TabSheet4: TTabSheet; Pagecontrol: TPageControl; Maske1: TButton; Maske2: TButton; Maske3: TButton; Grafik: TButton; MainMenu1: TMainMenu; Datei1: TMenuItem; Beenden1: TMenuItem; Laden1: TMenuItem; Speichern1: TMenuItem; N1: TMenuItem; E_HzuD: TEdit; E_A1: TEdit; E_A0: TEdit; E_A2: TEdit; E_Xmin: TEdit; E_Ymin: TEdit; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Erstekurve: TButton; VorigeKurve: TButton; NaechsteKurve: TButton; LetzteKurve: TButton; KurveSpeichern: TButton; KurveLoeschen: TButton; NeueKurve: TButton; E_Laenge: TEdit; E_Masse: TEdit; E_Fallhoehe: TEdit; E_GWert: TEdit; E_Breite: TEdit; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Berechnen: TButton; Image1: TImage; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Label18: TLabel; E_Polsterd: TEdit; E_Polsterf: TEdit; E_Stat: TEdit; Zuruecksetzen: TButton; StatusBar1: TStatusBar; Label1: TLabel; SaveDialog1: TSaveDialog; OpenDialog1: TOpenDialog; procedure OnMaske1click(Sender: TObject); procedure OnMaske2click(Sender: TObject); procedure OnMaske3click(Sender: TObject); procedure Onformshow(Sender: TObject); procedure Beenden1Click(Sender: TObject); procedure oneditkeypress(Sender: TObject; var Key: Char); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure positionieren(datensatz: integer); procedure ErstekurveClick(Sender: TObject); procedure VorigeKurveClick(Sender: TObject); procedure NaechsteKurveClick(Sender: TObject); procedure LetzteKurveClick(Sender: TObject); procedure KurveLoeschenClick(Sender: TObject); procedure NeueKurveClick(Sender: TObject); procedure KurveSpeichernClick(Sender: TObject); procedure BerechnenClick(Sender: TObject); procedure ZuruecksetzenClick(Sender: TObject); procedure Speichern1Click(Sender: TObject); procedure Laden1Click(Sender: TObject);
private public end;
var Form1: TForm1; datei: file of Polsterkurven; hoehe, hzud, sigma, masse, pdicke, pflaeche, gwert : single; laenge, breite, x, y, z : integer; implementation
{$R *.dfm}
....................... ....................... .........................
procedure TForm1.FormCreate(Sender: TObject); begin AssignFile(datei,'polsterkurven.str'); if FileExists('polsterkurven.str') then ReSet(datei) else ReWrite(datei); end;
procedure TForm1.FormDestroy(Sender: TObject); begin CloseFile(datei); end;
procedure TForm1.positionieren(datensatz: integer); var aktDS: Polsterkurven;
begin if (datensatz<0) or (datensatz>=FileSize(datei)) then exit else begin seek(datei, datensatz); read(datei, aktds); E_HzuD.text:= floattostr(aktDS.hzud); E_A0.text:= floattostr(aktds.A0); E_A1.text:= FloatToStr(aktds.A1); E_A2.text:= floattoStr(aktds.A2); E_Xmin.text:= floattoStr(aktds.xmin); E_Ymin.text:= floattoStr(aktds.ymin); end;
end;
procedure TForm1.ErstekurveClick(Sender: TObject); begin positionieren(0); end;
procedure TForm1.VorigeKurveClick(Sender: TObject); begin positionieren(FilePos(datei)-2); end;
procedure TForm1.NaechsteKurveClick(Sender: TObject); begin positionieren(FilePos(datei)); end;
procedure TForm1.LetzteKurveClick(Sender: TObject); begin positionieren(FileSize(datei)-1); end;
procedure TForm1.KurveLoeschenClick(Sender: TObject); var Buffer: array[0..BufferSize - 1] of Polsterkurven; i : Integer; StartRecord, EndRecord: Integer; Max: Integer;
begin Seek(Datei, FilePos(Datei)-1); StartRecord := FilePos(Datei) + 1; EndRecord := FileSize(Datei);
while StartRecord < EndRecord do begin
Max := BufferSize; if Max > EndRecord - StartRecord then Max := EndRecord - StartRecord; Seek(Datei, StartRecord); for i := 0 to Max - 1 do Read(Datei, Buffer[i]);
Seek(Datei, StartRecord - 1); for i := 0 to Max - 1 do Write(Datei, Buffer[i]); inc(StartRecord); end;
Truncate(Datei); Positionieren(StartRecord-2); end;
procedure TForm1.NeueKurveClick(Sender: TObject); var Buffer: array[0..BufferSize - 1] of Polsterkurven; i, p: integer; begin Seek(datei,0); p:=0; while not eof(datei) do begin fs.Read(datei, Buffer(p)); inc(p); if p > 9 then exit; end; CloseFile(datei); Buffer[p+1].HZUD:= 0; Buffer[p+1].a0:= 0; Buffer[p+1].a1:= 0; Buffer[p+1].a2:= 0; Buffer[p+1].xmin:= 0; Buffer[p+1].ymin:= 0;
ReWrite(datei); for i:=0 to p do write(datei, Buffer[i]); positionieren(FileSize(datei)-1); end;
procedure TForm1.KurveSpeichernClick(Sender: TObject); var datensatz: Polsterkurven; begin Seek(Datei,FilePos(Datei)-1); datensatz.hzud:= strtofloat(E_HzuD.Text); datensatz.A0:=strtofloat(E_A0.Text); datensatz.A1:=StrTofloat(E_A1.Text); datensatz.A2:=strtofloat(E_A2.Text); datensatz.xmin:=strtofloat(E_Xmin.Text); datensatz.ymin:=strtofloat(E_Ymin.Text); write(datei,datensatz); positionieren(0); end; |
Zuletzt bearbeitet von Bull80 am So 08.10.06 18:15, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 08.10.06 18:12
Ähh, wär schön, wenn du Delphi-Tags benutzt, damit es auch wie Delphi-Code formatiert ist. Entweder über dem Eingabefeld auf Bereiche und dann vor und nach der Codeeingabe auf Delphi klicken oder manuell [delphi] vor und [/delphi] nach dem Code hinschreiben.
|
|
Bull80 
      
Beiträge: 23
mal dies, mal das
|
Verfasst: So 08.10.06 18:16
sorry, hatte ich voll vergessen. kannst du mir denn evtl. weiterhelfen?
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 08.10.06 18:46
nach meinem eindruck verwendest du keine streams sondern typisierte dateien. schau dir hierzu doch mal das folgende tutorial an.
www.dsdt.info/tutorials/typdateien/
schau dir hierzu noch die dateiöffnungsmodi append und reset in der delphi hilfe an.
<HTH>
|
|
Bull80 
      
Beiträge: 23
mal dies, mal das
|
Verfasst: So 08.10.06 18:55
vielen dank @ Grenzgaenger. bin frischling auf diesem gebiet und kann dazu nur sagen, das ich eine datei mit der endung .str habe und unser prof in seiner aufgabenstellung von einer streamdatei spricht. in dieser sind datensätze enthalten, mit denen wir arbeiten sollen. oder hat der inhalt als solches absolut nichts mit einem stream zu tun? würde mich stark wundern, nachdem was ich darüber alles schon gelesen habe.
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 08.10.06 19:06
in der tat, der inhalt einer datei hat mit der endung rein gar nix zu tun.
eine stream datei ist einfach eine untypisierte datei, bei der die einzelnen instanzen eines objektes in einer definierten reienfolge aufgerufen werden mit der message eine bestimme operation auf einen stream durchzuführen.
wenn du das ganze nachbasteln möchtest, gerne.. in den delphi streams ist zudem noch die versionsnummer der objekte implementiert, aber das kannst du alles aus den quellcode herauslesen.
hier, vergiss mal deinen prof und kümmer dich einfach um das problem. der begriff streams führt nur jeden in die irre und ist zudem nicht angebracht.
PS: bei typisierten dateien hast du einen record
Delphi-Quelltext 1: 2: 3: 4:
| type Polsterkurven = record hzud, a0, a1, a2, Xmin, Ymin : single; end; |
bei streams hättest du ein objekt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| type Polsterkurven = object hzud, a0, a1, a2, Xmin, Ymin : single; procedure readfromfile(dateiname: string); procedure writefromfile(dateiname: string); end; |
|
|
Bull80 
      
Beiträge: 23
mal dies, mal das
|
Verfasst: So 08.10.06 19:31
hab erstmal vielen dank. ein kleiner fortschritt.
|
|
|