Entwickler-Ecke

Dateizugriff - Text in einer *.dat Datei ändern


Telefonkabel - Mo 15.01.07 17:53
Titel: Text in einer *.dat Datei ändern
Hy!
Ich habe ein Problem und zwar würde ich gerne eine *.dat Datei im Hintergrund laden und dort Zeichen ändern. (z.B. jedes 'b' durch 'h' ersetzten, etc.)
OK, gesagt getan. Ich hab also versucht das ganze erstmal in ein Memo zu laden, doch werden mir da nur ein paar Zeichen angezeigt. Deshalb hab ich daran gedacht (nicht probiert) die Zeichen, an der wohl die Memo scheitert, zu löschen, doch das kann ich auch nciht tun, da sonst die .dat nicht mehr funktionieren würde.
Kann mir irgendjemand helfen?

MfG
Telekab


Saubäär - Mo 15.01.07 18:32

Hi Telefonkabel,

ich würds irgendwie so machen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var s: String;
    newChar, oldChar: Char;
begin
 daten := TStringList.Create;
 oldChar := 'b'// altes Zeichen
 newChar := 'h'// neues Zeichen
 try
  daten.LoadFromFile('test.dat'); // Datei laden
  s := daten.Text; 
  repeat // solange ...
   INSERT(newChar, s, POS(oldChar, s)); // newChar direkt vor oldChar einfügen
   DELETE(s, POS(oldChar, s), 1); // und oldChar löschen
  until POS(oldChar, s) = 0// ...bis oldChar nicht mehr vorhanden ist.

   daten.Text := s;
  daten.SaveToFile('test.dat'); // Datei speichern 
 finally
  daten.Free;
  end;
end;


Gruß

Saubäär


LLCoolDave - Mo 15.01.07 18:59

Ich schätz einfach mal wild ins Blaue hinein dass in der .dat irgendwo ein #0 oder EOF vorkommt, und das Memo dann (berechtigterweise) denkt, da ist schluss.


Narses - Mo 15.01.07 19:28

Moin und :welcome: im Forum!

Meinst du vielleicht soetwas: ;)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  var
    DatFile: String;
    FileStream: TFileStream;
    i: Integer;
begin
  // Datei binär öffnen
  FileStream := TFileStream.Create('C:\boot.ini',fmOpenRead or fmShareDenyWrite);
  try // versuchen...
    SetLength(DatFile,FileStream.Size); // Platz für die Datei im Speicher machen
    FileStream.Read(PChar(DatFile)^,Length(DatFile)); // Daten lesen
  finally // ...und auf jeden Fall ausführen:
    FileStream.Free; // Datei schließen
  end;
  for i := 1 to Length(DatFile) do // über alle Zeichen in der Datei
    if (DatFile[i] = 'b'then // wenn es ein 'b' ist
      DatFile[i] := 'h'// durch 'h' ersetzen
  Memo1.Text := DatFile; // und dann dem Memo zuweisen

cu
Narses


IngoD7 - Mo 15.01.07 19:33

[OFF-topic ON]
Ich hasse Crosspostings. :-(
==> http://www.delphipraxis.net/topic100877_text+in+einer+dat+datei+aendern.html
[OFF-topic OFF]


Telefonkabel - Di 16.01.07 21:36

Ich danke euch, es funktioniert nun.
Hab es in einen Filestream gespeichert, den nach und nach ausgelesen und wenn er auf einen Treffer gestoßen ist, dann hat ers geändert. :)