AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit Stream

Ein Thema von Airblader · begonnen am 4. Nov 2005 · letzter Beitrag vom 4. Nov 2005
Antwort Antwort
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#1

Problem mit Stream

  Alt 4. Nov 2005, 14:02
Huhu
Ich hab grad ein Problem:

Ich habe eine Textdatei, die so aufgebaut ist:

Code:
1-0,1-0,1-0,1-0, .... (Das ganze 80 Mal)
1-0,1-0,1-0,1-0, .... (80 Mal...)

und hier nach unten hin das ganze Spiel auch 80 mal
Jetzt will ich jeweils die zahl vor dem "-" in ein 2D-Array einlesen, wobei eben [x,y] so ist, dass x der zeilennummer entspricht und y, die wievielte ziffer das in der zeile ist.

Bei folgendem Code bekomm ich aber einen Stream-lesefehler Kann mir jemand sagen was ich falsch mache?

Delphi-Quellcode:
procedure LoadMap(FN: string);
var
     FileS: TStream;
     Buf, Save: String;
     CPos, Spos: Integer;
     x,y,j: integer;
begin
     try
          FileS := TFileStream.Create(FN, fmOpenWrite);
          FileS.ReadBuffer(Buf, FileS.Size);
          x := 0;
          y := 0;
          for j := 0 to (80*80) do
          begin
               Inc(y);
               if y=80 then
               begin
                    Inc(x);
                    y := 0;
               end;

               CPos := pos(',',Buf);
               Save := Copy(Buf, 1, CPos-1);
               SPos := pos('-',Save);
               uMain.Map1.Fields[x,y] := StrToInt(Copy(Save, 1, SPos-1));

               Delete(Buf, 1, CPos);
          end;
     finally
          FileS.Free;
     end;
end;
MfG,
air
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

Re: Problem mit Stream

  Alt 4. Nov 2005, 14:20
Ich glaub du hast da ein paar fehler
Delphi-Quellcode:
FileS := TFileStream.Create(FN, fmOpenWrite); //das muss fmOpenRead heisen
FileS.ReadBuffer(Buf, FileS.Size); //und wenn deine Datei mehr als 255 Zeichen hat gibst auch mecker
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Problem mit Stream

  Alt 4. Nov 2005, 14:28
Mit folgender Funktion wird die Sache ganz einfach:
Delphi-Quellcode:
// Kopiert aus der JCL
function FileToString(const FileName: AnsiString): AnsiString;
var
  fs: TFileStream;
  len: Integer;
begin
  fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    len := fs.Size;
    SetLength(Result, len);
    if len > 0 then
      fs.ReadBuffer(Result[1], len);
  finally
    fs.Free;
  end;
end;
Ich kann nur empfehlen, obige Funktion dauerhaft auf Platte oder im Gedächtnis zu speichern!
@franktron: du hast vergessen, für den String "buf" Speicherplatz zu reservieren.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#4

Re: Problem mit Stream

  Alt 4. Nov 2005, 18:22
Ah okay, nu geht es
Danke

air
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:17 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