AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array als Datei speichern

Ein Thema von hummer · begonnen am 12. Jan 2004 · letzter Beitrag vom 9. Okt 2004
Antwort Antwort
Seite 2 von 4     12 34      
Mr_Anderson

Registriert seit: 7. Okt 2004
Ort: Solingen
11 Beiträge
 
#11

Re: Array als Datei speichern

  Alt 7. Okt 2004, 19:05
ich habe ein ähnliches Problem. Bei mir ist der Array mit dem Typ Record verknüpft:
Delphi-Quellcode:
type
    zeiten= record
      name: string;
      bzeit: string;
      versuch: integer;
    end;
im Privat Bereich :
testr : array[1..20] of zeiten; Danach werden die Werte jeweils durch die Aktionen des Users gesetzt. Danach möchte ich, dass er es speichern und auch wieder laden kann, jedoch funktioniert das nicht mit den oben aufgeführten Möglichkeiten.

Ich habe auch schon Tutorials wie Tut1 durchgelesen, jedoch bringt es mich nicht wirklich weiter.

Ich hoffe ihr könnt mich einen kleinen Tipp geben.

MfG
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#12

Re: Array als Datei speichern

  Alt 7. Okt 2004, 19:27
Hallo

dann würd ich auch einen Stream nehmen und die Daten mit Hier im Forum suchenTReader und Hier im Forum suchenTwriter lesen und schreiben. Du solltest mit den 2 Suchbegriffen auch Codebsp im forum finden. wenn nicht, meld dich wieder.

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Array als Datei speichern

  Alt 7. Okt 2004, 19:29
Nimm mal ShortStrings in deinem Record.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Mr_Anderson

Registriert seit: 7. Okt 2004
Ort: Solingen
11 Beiträge
 
#14

Re: Array als Datei speichern

  Alt 7. Okt 2004, 22:39
Zitat von Keldorn:
Hallo

dann würd ich auch einen Stream nehmen und die Daten mit Hier im Forum suchenTReader und Hier im Forum suchenTwriter lesen und schreiben. Du solltest mit den 2 Suchbegriffen auch Codebsp im forum finden. wenn nicht, meld dich wieder.

Mfg Frank
Ich habe die 14 Ergebnisse abgesucht und bin doch nicht schlauer geworden. den einzigen code, den ich gefunden habe ist der hier:
Delphi-Quellcode:
procedure WriteStringToStream(stream: TFileStream; str: string);
var
len: integer;
begin
len := length(str); // Länge des strings ermitteln
stream.write(len, SizeOf(len)); // Länge des Strings speichern
stream.write(PChar(str)^, len); // String mittels PChar speichern
end;


procedure ReadStringFromStream(stream: TFileStream; var str: string);
var
len: integer;
begin
stream.read(len, SizeOf(len)); // Länge des Strings auslesen
SetLength(str, len); // Länge des Srings setzen
stream.read(PChar(str)^, len); // Strings mittels PChar auslesen
end;
Jedoch speichert dieser code nur 'normale' record und keinen, der mit einem Array in verbindung steht. Außerdem wird hier auch kein TWriter oder TReader benutzt, was ich ja gerade benutzten sollte, wegen der Strukturen. Auch die Delphi Hilfe schweigt bei der eingabe von TWriter....
--> nur unter der Wortsuche fand ich einen kleinen Artikel der jediglich die eigenschaften beschrieb, jedoch nicht auf die Syntaxs einging.



MfG
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Array als Datei speichern

  Alt 7. Okt 2004, 23:02
So geht es:
Delphi-Quellcode:
// unser Record
type
  TScoreRecord = packed record
    Player: string[25];
    Score: Cardinal;
  end;

// unser Array vom Typ unseres Records
var
  ScoreRecord: array[0..2] of TScoreRecord;

procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TFileStream;
begin
  // Array fülllen
  ScoreRecord[0].Player := 'Hans';
  ScoreRecord[0].Score := 5;
  ScoreRecord[1].Player := 'Fritz';
  ScoreRecord[1].Score := 6;
  ScoreRecord[2].Player := 'Lieschen';
  ScoreRecord[2].Score := 4;
  // abspeichern
  fs := TFileStream.Create('d:\HighScore.hs', fmCreate);
  try
    try
      // Array in Datei schreiben
      fs.WriteBuffer(ScoreRecord, sizeof(ScoreRecord));
    except
      // Schreibfehler aufgetreten
      on E: EWriteError do
        ShowMessage(E.Message);
    end;
  finally
    // fs wieder freigeben
    FreeAndNil(fs);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  fs: TFileStream;
  i: Integer;
begin
  fs := TFileStream.Create('d:\HighScore.hs', fmOpenRead);
  try
    try
      // erstmal wieder leeren
      for i := 0 to length(ScoreRecord) - 1 do
      begin
        ScoreRecord[i].Player := '';
        ScoreRecord[i].Score := 0;
      end;
      // aus Datei einlesen
      fs.ReadBuffer(ScoreRecord, sizeof(ScoreRecord));
      // und kucken was drinne steht
      for i := 0 to length(ScoreRecord) - 1 do
      begin
        ShowMessage(ScoreRecord[i].Player+#13#10+IntToStr(ScoreRecord[i].Score));
      end;
    except
      // Lesefehler aufgetreten
      on E: EReadError do
        ShowMessage(E.Message);
    end;
  finally
    // fs wieder freigeben
    FreeAndNil(fs);
  end;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#16

Re: Array als Datei speichern

  Alt 8. Okt 2004, 09:34
Zitat von Keldorn:
Hallo

dann würd ich auch einen Stream nehmen und die Daten mit Hier im Forum suchenTReader und Hier im Forum suchenTwriter lesen und schreiben. Du solltest mit den 2 Suchbegriffen auch Codebsp im forum finden. wenn nicht, meld dich wieder.

Mfg Frank
Das ist ein sehr guter rat! Damit lassen sich dynamische strukturen viel transparenter speichern.

Tu dir selbst einen gefallen und fang garnicht erst an, records direkt binär zu speichern, erst recht nicht wenn da shortStrings drinn sind (platzverschwendung). Wenn du zB. die lange des strings, oder daten hinzufügen willst, dann ist das format deiner alten daten inkompatibel.

Ich mach es oft so, das ich erst eine signatur, versions-nummer und ein schema speichere, das besagt welche daten geschrieben werden. Beim auslesen weiss man dann genau, was man wohin laden muss.
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Mr_Anderson

Registriert seit: 7. Okt 2004
Ort: Solingen
11 Beiträge
 
#17

Re: Array als Datei speichern

  Alt 8. Okt 2004, 14:11
Zitat von maximov:
Zitat von Keldorn:
Hallo

dann würd ich auch einen Stream nehmen und die Daten mit Hier im Forum suchenTReader und Hier im Forum suchenTwriter lesen und schreiben. Du solltest mit den 2 Suchbegriffen auch Codebsp im forum finden. wenn nicht, meld dich wieder.

Mfg Frank
Das ist ein sehr guter rat! Damit lassen sich dynamische strukturen viel transparenter speichern.

Tu dir selbst einen gefallen und fang garnicht erst an, records direkt binär zu speichern, erst recht nicht wenn da shortStrings drinn sind (platzverschwendung). Wenn du zB. die lange des strings, oder daten hinzufügen willst, dann ist das format deiner alten daten inkompatibel.

Ich mach es oft so, das ich erst eine signatur, versions-nummer und ein schema speichere, das besagt welche daten geschrieben werden. Beim auslesen weiss man dann genau, was man wohin laden muss.
So langsam habe ich es ja verstanden, jedoch fehlt mir ein konkretes Beispiel mit TReader und TWriter. Das einzige, was ich in der CL und im Forum finde, beschreibt niemals die genaue Verwendung der Syntaxs.

habt ihr vieleicht einen Konkreten link etc...
MfG

@Luckie thx, werde ich sofort mal testen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#18

Re: Array als Datei speichern

  Alt 8. Okt 2004, 14:16
Zitat von Mr_Anderson:
@Luckie thx, werde ich sofort mal testen
Da gfibt es nichts zum testen, das läuft.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Mr_Anderson

Registriert seit: 7. Okt 2004
Ort: Solingen
11 Beiträge
 
#19

Re: Array als Datei speichern

  Alt 8. Okt 2004, 14:42
nunja funktionieren stelle ich mir anders vor

Also es funktioniert nur einmal. Bei einem erneuten ausführen der laden funktion stüzt delphi komplett ab , wegen einer "Zugriffsverletzung".
Außerdem zeigt er mir nicht die Werte an, er zeigt nichts an im "showmessage":

Code sieht so aus:
Delphi-Quellcode:
type
    zeiten= packed record
      name: string;
      bzeit: string;
      versuch: integer;
    end;
var testr : array[1..20] of zeiten;

procedure TForm1.SpeedButton3Click(Sender: TObject);
var
    fs: TFileStream;
  i: Integer;
begin

  fs := TFileStream.Create('d:\HighScore.hs', fmOpenRead);
  try
    try
      // erstmal wieder leeren
      for i := 0 to length(testr) - 1 do
      begin
        testr[i].bzeit := '';
        testr[i].name := '';
        testr[i].versuch := 0;
      end;
      // aus Datei einlesen
      fs.ReadBuffer(testr, sizeof(testr));
      // und kucken was drinne steht
      for i := 0 to length(testr) - 1 do
      begin
        ShowMessage('Bzeit:'+testr[i].bzeit+#13#10+'Verusch:'+IntToStr(testr[i].versuch)+#13#10+'name'+testr[i].name);
      end;
    except
      // Lesefehler aufgetreten
      on E: EReadError do
        ShowMessage(E.Message);
    end;
  finally
    // fs wieder freigeben
    FreeAndNil(fs);
  end;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
var outputfile : textfile;
    i : word;
    StrList: TStrings;
    y: integer;
    fs: TFileStream;
begin
  testr[1].name := 'muh';
  testr[2].name := 'jta';
  fs := TFileStream.Create('d:\HighScore.hs', fmCreate);
  try
    try
      // Array in Datei schreiben
      fs.WriteBuffer(testr, sizeof(testr));
    except
      // Schreibfehler aufgetreten
      on E: EWriteError do
        ShowMessage(E.Message);
    end;
  finally
    // fs wieder freigeben
    FreeAndNil(fs);
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#20

Re: Array als Datei speichern

  Alt 8. Okt 2004, 14:47
Bei mir definitiv nicht, sonst hätte ich das hier nicht gepostet.

Demo im Anhang.
Angehängte Dateien
Dateityp: zip savearray.zip (196,0 KB, 17x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz