AGB  ·  Datenschutz  ·  Impressum  







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

Text in einer *.dat Datei ändern

Ein Thema von Telefonkabel · begonnen am 15. Jan 2007 · letzter Beitrag vom 16. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Telefonkabel

Registriert seit: 15. Jan 2007
94 Beiträge
 
#1

Text in einer *.dat Datei ändern

  Alt 15. Jan 2007, 15:53
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Text in einer *.dat Datei ändern

  Alt 15. Jan 2007, 15:59
Die Daten kannst Du nicht in einem Memo anzeigen lassen, da in den binären
Daten auch Steuerzeichen enthalten sind.

Du könntest die Daten in ein TFileStream einlesen und dort bearbeiten.
Beispiele zu TFileStream oder auch die gepufferte Version dazu findest Du hier im Forum.


Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von St.Pauli
St.Pauli

Registriert seit: 26. Dez 2004
351 Beiträge
 
Delphi 7 Personal
 
#3

Re: Text in einer *.dat Datei ändern

  Alt 15. Jan 2007, 16:02
Zitat von St.Pauli:
Delphi/Pascal ist jedoch mit seinen Strings ein Ausnahmefall. Windows arbeitet mit nullterminierten Strings. Wenn du nun deinen String zum Beispiel in einem Label darstellen willst, ruft die VCL Windows-Funktionen auf und konvertiert deinen String in einen nullterminierten String. Diese Konvertierung führt dazu, dass das erste #0 als ein Indikator für das Ende des Strings gewertet wird. Der Rest wird abgeschnitten. Der String 'Null' + #0 + 'terminiert' in einem Label wird also lediglich als 'Null' dargestellt werden.
Der Beitrag stammt aus diesem Thema. Du darfst mit der Datei nur im Speicher arbeiten und musst sehen, dass du keine Funktionen verwendest die diese von String in PChar konvertieren.
Gruß St.Pauli
  Mit Zitat antworten Zitat
Telefonkabel

Registriert seit: 15. Jan 2007
94 Beiträge
 
#4

Re: Text in einer *.dat Datei ändern

  Alt 15. Jan 2007, 16:07
Danke. And einen Filestream hab ich auhc schon gedact gehabt, doch stellte sich mir da die Frage, wie ich in diesem Filestream rumwurschteln kann. Ich meine, es ist ja kein normaler String, also sollte es doch etwas komplizierter sein eben z.B. jedes 'b' durch 'h' zu ersetzten, oder?

EDIT:
@St. Pauli
Heißt das, dass ich die Datei in einen String speichern und dort bearbeiten könnte, solange ich sie ncith anzeige?

MfG
Telekab.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Text in einer *.dat Datei ändern

  Alt 15. Jan 2007, 16:13
Vielleicht bietet Dir dieser Thread ein wenig Anregung: -> http://www.delphipraxis.net/internal...ght=filestream

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
marabu

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

Re: Text in einer *.dat Datei ändern

  Alt 15. Jan 2007, 16:20
Herzlich willkommen in der Delphi-PRAXiS, Telefonkabel.

Wenn deine Datei offensichtlich Binärdaten enthält, wirst du zuerst den genauen Aufbau der Datei ermitteln müssen, bevor du ein Zeichen in ein anderes übersetzen kannst. Du musst bei jedem Zeichen zweifelsfrei wissen, dass es kein Binärwert ist, sondern wirklich ein Text-Zeichen.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 16. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Text in einer *.dat Datei ändern

  Alt 15. Jan 2007, 17:28
http://www.delphi-forum.de/viewtopic...=413772#413772

MfG
Ingo aus der Anti-Crossposting-Bewegung
  Mit Zitat antworten Zitat
shmia

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

Re: Text in einer *.dat Datei ändern

  Alt 15. Jan 2007, 18:06
Hier erstmal 2 Funktionen, um eine Datei in einen String zu laden
und einen String als Datei zu speichern:
Delphi-Quellcode:
function FileToString(const FileName: string): 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;

procedure StringToFile(const FileName: string; const Contents: AnsiString);
var
  fs: TFileStream;
  Len: Integer;
begin
  fs := TFileStream.Create(FileName, fmCreate);
  try
    Len := Length(Contents);
    if Len > 0 then
      fs.WriteBuffer(Contents[1], Len);
  finally
    fs.Free;
  end;
end;
Damit kannst du Dateien bis max. 2GB laden und speichern.
Ein String (genauer AnsiString) kann ja ohne Probleme auch nichtdruckbare Zeichen und auch
die Hex-0 (#0) aufnehmen.
Mit etwas Stringverarbeitung kannst du die Daten nach Belieben verändern.
Andreas
  Mit Zitat antworten Zitat
Telefonkabel

Registriert seit: 15. Jan 2007
94 Beiträge
 
#9

Re: Text in einer *.dat Datei ändern

  Alt 16. Jan 2007, 17:19
OK, es funktioniert nun beinahe alles, danke euch.
Ich habe nurnoch ein Problem, und zwar wird die Buchstabenänderung in einer Procedure gemacht, dabei wird der Buchstabe in den das ganze geändert werden soll, als String an die Procedure gegeben. Die Änderung erfolgt auch soweit, nur wird statt des eingegeben Buchstaben irgendein anderes Zeichen eingefügt, wie z.B. statt einem 'D' ein 'î', oder sowas. Wenn ich aber diesen Buchstaben in der Procedure in ein Memo gebe, dann ist es eben wie in dem Beispiel ein 'D'.
Was kann ich dagegen tun?


@Ingo
Sorry, wusst ich nicht, ich dachte einfach, dass mir so schneller geholfen werden kann.
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 16. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Text in einer *.dat Datei ändern

  Alt 16. Jan 2007, 17:48
Zitat von Telefonkabel:
@Ingo
Sorry, wusst ich nicht, ich dachte einfach, dass mir so schneller geholfen werden kann.
Dem ist durchaus auch mal so, mal aber auch nicht. Viele fähige Leute hüben und drüben stellen die Hilfe sofort ein, wenn sie erfahren, dass es sich um Crosspostings handelt. Abgesehen vom "versauten Ruf" ist der Nutzen von Crosspostings also fraglich.

Denn:
Zitat von Telefonkabel:
OK, es funktioniert nun beinahe alles, danke euch.
Was funktioniert denn jetzt? Das, was die Leute hier gepostet haben, oder das, was die Leute im Delphi-Forum gepostet haben? Dort im DF hast du (bis zu diesem Zeitpunkt) noch gar nicht reagiert. Wie fühlen sich die Helfer im Forum A, wenn sie sich noch ihren Kopf für dich zerbrechen und ihre Zeit opfern, während in Forum B schon lange die Lösung gegeben wurde?

Wenn du verstehst, was ich meine ...
  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 10:00 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