AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Dateien / Laufwerke Delphi Strings in Datein jeder Größen und Typs
Thema durchsuchen
Ansicht
Themen-Optionen

Strings in Datein jeder Größen und Typs

Ein Thema von endeffects · begonnen am 17. Aug 2005
Antwort Antwort
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#1

Strings in Datein jeder Größen und Typs

  Alt 17. Aug 2005, 20:27
Hallo,

hier ein kleiner Code Schnippsel um Strings in Dateien
jeden Typs und jeder Größe zu bearbeiten. Benötigt wird hierzu
allerdings die FastStrings Unit die man unter folgender
Adresse kostenlos runterladen kann:

http://www.droopyeyes.com/default.as...owProduct&ID=4

Diese Unit basiert auf unterschiedlichen ASM Algorythmen
und ermöglicht damit extrem schnelle String Operationen.
Alternativ kann man natürlich auch die hauseigenen Methoden
pos(), replace() usw. verwenden.

Im folgenden SourceCode wird eine Binärdatei (input.exe)
in einem String Blockweise eingelesen. Grundsätzlich
spielt die Größer der Datei dabei keine Rolle. Allerdings sollte
man bei größeren Dateien die Blöcke (Buffer: String) jeweils
einzelnd bearbeiten.

Da es sich hier im Beispiel bei der BinärDatei lediglich
um eine kleinere "Hello World" Applikation mit einem
entsprechendem Lable handelt, wird die gesamte Datei
in den String 'SourceFile' geladen;

Die Variable 'AppString' bezeichnet in diesem Fall
den String den wir in der BinärDatei ändern möchten
und der anschließend durch 'ReplaceString' ersetzt wird.

FastReplace ist eine Methode aus der empfohlenen FastStrings Unit.

Damit nun die 'Hello World' Anwendung nach dem Bearbeiten
auch läuffähig bleibt muss geprüft werden ob der String
den wir ersetzen wollen die gleiche Größe hat.

Sofern der neue String zu groß ist ist ein Ersetzen ohne
weiteres nicht möglich. Dieser Fall wird in diesem
Beispiel momentan nicht behandelt. Um zu verhindern
das der gegensätzliche Fall eintritt wird der
neue String mit dem nachfolgendem Code mit Leerzeichen
auf die Orginalgröße aufgefüllt.

Format('%-'+IntToStr(length(AppString))+'s', [ReplaceString]);

Und das war es auch eigentlich schon.

Delphi-Quellcode:

uses FastStrings

...


var SrcStream: TFileStream; OutputFile: TextFile;
    SourceFile, Buffer, Srcstring, AppString, ReplaceString: String;
    Blocksize, ChunkLen: Integer;
    N: Int64;
begin
  Blocksize:= 1024;
  SourceFile:= ExtractFilePath(Application.ExeName)+'input.exe';
  try
    SrcStream:=TFileStream.Create(SourceFile, fmOpenread or fmShareDenyNone);
    Srcstring:='';
    N:=SrcStream.Size;
    while N>0 do
    begin
      if N>BlockSize
        then ChunkLen:=BlockSize
      else
        ChunkLen:=N;
      SetLength(Buffer,ChunkLen);
      SrcStream.Read(Buffer[1],ChunkLen);

      Srcstring:= Srcstring+copy(Buffer, 1, MaxInt);

      N:=N-ChunkLen;
      Buffer:= '';
    end;
    finally
      SrcStream.Free;
    end;

    AppString:= 'Hello World';
    ReplaceString:= 'dlroW olleH';
    if length(ReplaceString) <= length(AppString) then
      SrcString:= FastReplace(SrcString, AppString, Format('%-'+IntToStr(length(AppString))+'s', [ReplaceString]), True);

    try
      AssignFile(OutputFile, ExtractFilePath(Application.ExeName)+'output.exe');
      ReWrite(OutputFile);
      Write(OutputFile, SrcString);
    finally
      CloseFile(OutputFile);
    end;
  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 11:36 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