AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [TStringList] Problem mit einer Datei (Lädt nicht)
Thema durchsuchen
Ansicht
Themen-Optionen

[TStringList] Problem mit einer Datei (Lädt nicht)

Ein Thema von xZise · begonnen am 2. Okt 2006 · letzter Beitrag vom 28. Okt 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

[TStringList] Problem mit einer Datei (Lädt nicht)

  Alt 2. Okt 2006, 12:43
Datei siehe Anhang
Ich habe eine Datei, die ich mit einer TStringList geschrieben habe. Nur komischerweise macht sie beim Laden zicke:

Delphi-Quellcode:
procedure TfrmMain.leseMap(Path : TFileName);
var
  i, j, k : Integer;
  F2M : TStrings;
  Buffer : Char;
begin
  // Map leeren:
  SetLength(Map, 0, 0, 0);

  F2M := TStringList.Create;
  try
    F2M.LoadFromFile(Path);
    if LowerCase(ExtractFileExt(Path)) = '.fmapthen begin
      {...}
    end else begin
      // Ansonsten normal "f2m"
      SetLength(Map, 4, Length(F2M[1]), Round(F2M.Count / 4));
      for i := MT_PLAYER to MT_KI do begin
        for j := 0 to Length(F2M[1]) - 1 do begin
          for k := 0 to Round(F2M.Count / 4) - 1 do begin
            Map[i, j, k] := Ord(F2M[i * Round(F2M.Count / 4) + k + 1][j + 1]);
          end;
        end;
      end;
    end;
  finally
    F2M.Free;
  end;
end;
Das funktioniert nicht, und ich bekomme im "SetLength" einen Fehler, weil er "F2M[0]/[1]" nicht kennt:
Zitat:
F2M[0]: Delphi exception EStringListError at $740F949
F2M[1]: Delphi exception EStringListError at $740F949
Und Path gibt es (direkt von OpenDialog ausgelesen!)...

[edit]OOPs... Da fehlte die Datei ^^[/edit]
Angehängte Dateien
Dateityp: zip map1_861.zip (191 Bytes, 7x aufgerufen)
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: [TStringList] Problem mit einer Datei (Lädt nicht)

  Alt 2. Okt 2006, 18:12
Hallo Fabian,

was erwartest du? LoadFromFile() interpretiert deinen Dateiinhalt als einen String und will ihn an der Zeichenfolge sLineBreak in einzelne Zeilen zerlegen. Schon beim ersten Zeichen wird die Methode allerdings hart ausgebremst, denn ein low value (#0) signalisiert, dass der Text bereits zu Ende ist. Du solltest nur echte Texte in TStrings und seinen Nachkommen verstauen. Oder hast du dir deine Datei selbst noch gar nicht angesehen?

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

Re: [TStringList] Problem mit einer Datei (Lädt nicht)

  Alt 2. Okt 2006, 19:15
Also eigentlich hatte ich geplannt eine Zahl zw. 0 un 255 in ein ASCII-Zeichen zu ändern und dann abzuspeichern.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: [TStringList] Problem mit einer Datei (Lädt nicht)

  Alt 2. Okt 2006, 19:42
Ja mach doch. Nur ein Zeichen oder mehrere? Immer gleich viele? Beschreibe mal etwas mehr die Projektidee, bevor du ein Detail der Umsetzung diskutierst. Sonst bekommst du noch falsche Ratschläge.

Grüße, marabu
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#5

Re: [TStringList] Problem mit einer Datei (Lädt nicht)

  Alt 2. Okt 2006, 19:56
Okay!
Also ich möchte eine Karte laden.
Die Karte besteht aus X mal Y Feldern.
Inder Datei wäre das dann:
Breite = X
Höhe = Y * 4 (4 Ebenen)

Und die Eigenschafften jedes Feldes sind in einer Zahl definiert, welche ich (eigentlich) aus ein ASCII-Zeichen umwandeln wollte. Dummweise geht das aber nicht so, wie ich das wollte.

Ich hoffe mal es ist gut genug beschrieben.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: [TStringList] Problem mit einer Datei (Lädt nicht)

  Alt 2. Okt 2006, 20:20
Du kannst dein drei-dimensionales Array einfach binär abspeichern - alles auf einmal in einen FileStream. Oder willst du es lieber in einer lesbaren Textdatei speichern?

marabu
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#7

Re: [TStringList] Problem mit einer Datei (Lädt nicht)

  Alt 2. Okt 2006, 20:50
Also es wäre einfacher mit einer "String-Datei"... Müsste ich dann nur auf das 1. Zeichen verzichten? Oder wie sieht das aus?

[edit]OOPs... eigentlich sollte das genau andersherum sein: Ich wollte eine Map auslesen. [/edit]
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#8

Re: [TStringList] Problem mit einer Datei (Lädt nicht)

  Alt 27. Okt 2006, 12:13
Ich möchte nocheinmal zurückkommen ... *gg*

Also ich wollte eigentlich eine Datei bekommen, in der die ASCII-Werte vorkommen (0-255).
Die Größe ist wie oben beschrieben A * B Zeichen und die Kartengröße dann A * (B / 4).

Wie kann ich nun an die Daten kommen? Also, soweit ich das richtig erkannt habe, schafft er es ja immerhin die Werte abzupseichern ... Nur am auslesen haperts...
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: [TStringList] Problem mit einer Datei (Lädt nicht)

  Alt 27. Okt 2006, 12:47
Hallo Fabian,

deine Datei Map1.f2m enthält 48 Datensätze mit jeweils 14 Zeichen. Der Inhalt der Datensätze ist binär, aber die letzten beiden Zeichen cr/lf lassen mich vermuten, dass du die Zeilen mit WriteLn() weggeschrieben hast. Das scheint mir in zweierlei Hinsicht nicht optimal zu sein. Warum mit WriteLn() schreiben, wenn du die Daten mit ReadLn() nicht zuverlässig wieder einlessen kannst? Außerdem musst du dein array doch gar nicht zerpflücken um es zu Speichern und wieder zu Laden:

Delphi-Quellcode:
type
  TMatrix = packed array [1..48, 1..12] of Byte;

procedure SaveMatrix(m: TMatrix; fn: TFileName);
begin
  with TFileStream.Create(fn, fmCreate) do
  try
    Write(m, SizeOf(m));
  finally
    Free;
  end;
end;

procedure LoadMatrix(var m: TMatrix; fn: TFileName);
begin
  with TFileStream.Create(fn, fmOpenRead or fmShareDenyWrite) do
  try
    Read(m, SizeOf(m));
  finally
    Free;
  end;
end;
Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#10

Re: [TStringList] Problem mit einer Datei (Lädt nicht)

  Alt 27. Okt 2006, 21:12
Also ich habe die Datei über "TStringList.SaveToFile(x)" gespeichert...

Nun die Fragen:
1. Was ist ein "packed" array? Kann es auch dynamisch sein?
2. Wie bekomme ich die Breite/Höhe?
3. Speichert es immer den ASCII-Wert? Also z.B. Chr(M[2][3])?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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