Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 12:10

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: String in Filestream
BeitragVerfasst: Di Okt 04, 2005 13:01 
Offline
DGL Member
Benutzeravatar

Registriert: So Feb 06, 2005 17:29
Beiträge: 187
Programmiersprache: C, C++
Hiho,
ich schreibe gerade einen kleinen Vokabeltrainer für Chinesisch. Dafür wollte ich dann mal .NET benutzen, da dort AFAIK auch intern mit Unicode gearbeitet wird. So brauch ich mir nicht viel Gedanken um das Anzeigen der Schriftzeichen zu machen. Es klappt auch alles ganz wunderbar, bis auf das Laden und Speichern aus und in Dateien.
Bisher habe ich immer Filestreams verwendet, es also auch diesmal so probiert. Für Integerwerte funktioniert das auch, nur bei strings bekomme ich jedesmal eine Fehlermeldung.

Code:
  1.  
  2.   Data := TFileStream.Create('Data',fmOpenRead);
  3.   Data.Position := 0;
  4.   Data.ReadBuffer(MaxVoc,SizeOf(integer));
  5.   SetLength(Vokabel,MaxVoc);
  6.   for i := 0 to MaxVoc-1 do
  7.   begin
  8.     Data.ReadBuffer(Vokabel[i].oldrank,Sizeof(integer));
  9.     Data.ReadBuffer(Vokabel[i].rank,Sizeof(integer));
  10.     Data.ReadBuffer(Vokabel[i].german,Sizeof(widestring));
  11.     Data.ReadBuffer(Vokabel[i].chinese,Sizeof(widestring));
  12.   end;
  13.   Data.Free;
  14.  


Zitat:
[Fehler] Main.pas(92): E2250 Es gibt keine erladene Version von 'ReadBuffer', die man mit diesen Argumenten aufrufen kann
[Fehler] Main.pas(93): E2250 Es gibt keine erladene Version von 'ReadBuffer', die man mit diesen Argumenten aufrufen kann


Vielleicht kann mir ja jemand sagen woran das liegt. Ich brauch ja nichts besonderes, ich muss nur ein paar Zeichenketten in einer Datei unterbringen . :lol:

Ich danke schonmal für Antworten.

_________________
Flummi: Projektseite und Projektthread


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 04, 2005 13:08 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Bei .Net nimmt man dann BinaryWriter bzw. BinaryReader zum Lesen. Diese Klassen bekommen jeweils den Stream im Konstruktor übergeben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 04, 2005 13:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Strings haben (im vergleich zu integer oder single Variablen oder so) keine feste Länge/Größe, daher muss mann da etwas komplizierter vorgehen. Denn in Filestreams werde die Daten einfach hintereinander weggeschrieben und dann muss mann beim laden auch wissen, wie groß die einzelnen Teile sind...

Ich benutze dazu folgende Funktionen:


Code:
  1.   PFileStream = ^TFileStream;
  2.  
  3.   PString = ^String;
  4.  
  5.   procedure SaveString(S: PString;F:PFileStream);
  6.  
  7.   procedure LoadString(S: PString;F:PFileStream);
  8.  
  9. procedure SaveString(S: PString;F:PFileStream);
  10. var
  11.   x: integer;
  12. begin
  13.   x:=length(S^);
  14.   f.WriteBuffer(x,sizeof(integer));
  15.   if x>0
  16.     then f.WriteBuffer(S^[1],x);
  17. end;
  18.  
  19. procedure LoadString(S: PString;F:PFileStream);
  20. var
  21.   x: integer;
  22. begin
  23.   f.readBuffer(x,sizeof(integer));
  24.   SetLength(S^,x);
  25.   if x>0 then
  26.     f.readBuffer(S^[1],x);
  27. end;


Da wird die länge des strings mit gespeichert und geladen.
Die schreibst du an einfach statt:

Code:
  1. Data.ReadBuffer(string,Sizeof(string));
  2. Data.WriteBuffer(string,Sizeof(string));

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 04, 2005 13:40 
Offline
DGL Member
Benutzeravatar

Registriert: So Feb 06, 2005 17:29
Beiträge: 187
Programmiersprache: C, C++
Dankeschön!
Ist genau das was ich brauchte! :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 07, 2005 17:34 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Kann man das nicht direkt mit .NET machen? Das Laden von strings? Ist ja nicht gerade so, dass man das selten bräuchte ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 07, 2005 17:51 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ja eben über die BinaryWriter/BinaryReader Klassen. Denen übergibt man im Konstruktor einen Stream auf den man schreiben bzw. von dem man Lesen möchte.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]