Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit Stream (https://www.delphipraxis.net/56353-problem-mit-stream.html)

Airblader 4. Nov 2005 15:02


Problem mit Stream
 
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

franktron 4. Nov 2005 15:20

Re: Problem mit Stream
 
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

shmia 4. Nov 2005 15:28

Re: Problem mit Stream
 
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.

Airblader 4. Nov 2005 19:22

Re: Problem mit Stream
 
Ah okay, nu geht es :stupid: :)
Danke ;)

air


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz