AGB  ·  Datenschutz  ·  Impressum  







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

Zeilenweise in Datei Schreiben

Ein Thema von Evian · begonnen am 1. Nov 2005 · letzter Beitrag vom 2. Nov 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Zeilenweise in Datei Schreiben

  Alt 2. Nov 2005, 00:20
Das Zeichen unter Windows zum Trennen von verzeichnissen und dateien ist der "\" und nicht der "/", dass auch der "/" funktioniert liegt an der Verspieltheit der damaligen DOS Entwickler bei Microsoft, die etwas Unix like haben wollten. Man sollte aber nicht darauf vertrauen, dass er auch immer akzeptiert wird, da eben der offizielle PathSeparator der "\" ist.

Aber was heißt du wußtest das nicht? Noch nie einen Pfad in der Konsole oder damals noch unter DOS eingegeben?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#12

Re: Zeilenweise in Datei Schreiben

  Alt 2. Nov 2005, 00:28
Doch wusste ich schon, aber ich habe in letzter ZEit viel mit Linux gearbeitet und diese Sache einfach übersehen. PathSeparator hat sich im ersten Moment einfach nur etwas seltsam angehört und deshalb konnte ich damit nicht gleich etwas anfangen. (um die Uhrzeit ist mein Gehirn warscheinlich bei 5% Leistungsfähigkeit oder so angekommen ^^)
Nun gut, aber trotz alledem bleibt der Fehler der selbe.

Also nur zum Verständniss. Ist es unter Windows mit Delphi überhaupt möglich, bestimmte Zeilen einer Textdatei zu ändern, ohne dass man die gesammte Datei in den Hauptspeicher laden muss?! Und wenn ja, könnte vielleicht jemand einen kleinen CodeBeispiel posten, wie ich das mache? Weil mit dem Code, den ich jetzt habe, geht es nicht...
-> www.Phillsoft.de

Ich bin nun Mathematiker, aber meine Freundin bleibt trotzdem unberechenbar!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Zeilenweise in Datei Schreiben

  Alt 2. Nov 2005, 00:39
Du kannst nicht gleichzeitig aus einer datei lesen und in sie reinschreiben. Geh über eine Temporäredatei.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
marabu

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

Re: Zeilenweise in Datei Schreiben

  Alt 2. Nov 2005, 06:28
Hallo Evian,

hier hast du ein wenig Code, der dir das Prinzip zeigt:

Delphi-Quellcode:
procedure PrependLines(s: TStrings; fileName: string);
var
  fs: TFileStream;
  fn: string;
begin
  SetLength(fn, MAX_PATH);
  if GetTempFileName('.', 'TMP', 0, @fn[1]) = 0
    then raise Exception.Create(SysErrorMessage(GetLastError))
    else SetLength(fn, Pred(Pos(#0, fn)));
  fs := TFileStream.Create(fileName, fmOpenRead, fmShareDenyWrite);
  with TFileStream.Create(fn, fmCreate) do
  begin
    Write(s.GetText^, StrLen(s.GetText));
    CopyFrom(fs, fs.Size);
    Free;
  end;
  fs.Free;
  DeleteFile(fileName);
  RenameFile(fn, fileName);
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
const
  fn = 'c:\daten\temp.txt';
begin
  with Memo.Lines do
  begin
    Clear;
    Add('123');
    Add('abc');
  end;
  PrependLines(Memo.Lines, fn);
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#15

Re: Zeilenweise in Datei Schreiben

  Alt 2. Nov 2005, 15:41
also prinziepel kann ich hiermit schreiben, aber es wird nicht überschrieben, sondern quasi die Zeielen "123" und "abc" in die erste und zweite ZEile der Datei geschrieben und der Rest dann weiter nach unten verschoben. Also nach dem bearbeiten hat die Datei x also 2 Zeilen mehr als vor dem bearbeiten. Ich möchte aber keine neuen informationen vorhängen, sondern direkt die erste und zweite Zeile überschreiben.
-> www.Phillsoft.de

Ich bin nun Mathematiker, aber meine Freundin bleibt trotzdem unberechenbar!
  Mit Zitat antworten Zitat
marabu

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

Re: Zeilenweise in Datei Schreiben

  Alt 2. Nov 2005, 16:31
Ersetzen kannst du bestimmte Zeilen so:

Delphi-Quellcode:
procedure ReplaceLines(
  s: TStrings; // Ersatzzeilen
  fileName: string; // Name einer existierenden Textdatei
  iStart: cardinal // Zeilennummer, Beginn der Ersetzung, ab 0 gezählt
);
const
  BUFSIZE = 32 * 1024;
var
  fIn, fOut: TextFile;
  fn, line: string;
  iCount, iStop: cardinal;
  bufIn, bufOut: array of byte;
begin
  SetLength(fn, MAX_PATH);
  if GetTempFileName('.', 'TMP', 0, @fn[1]) = 0
    then raise Exception.Create(SysErrorMessage(GetLastError))
    else SetLength(fn, Pred(Pos(#0, fn)));
  AssignFile(fIn, fileName);
  Reset(fIn);
  SetLength(bufIn, BUFSIZE);
  SetTextBuf(fIn, bufIn[0]);
  AssignFile(fOut, fn);
  Rewrite(fOut);
  SetLength(bufOut, BUFSIZE);
  SetTextBuf(fOut, bufOut[0]);
  iCount := 0;
  iStop := iStart + s.Count;
  while not Eof(fIn) do
  begin
    ReadLn(fIn, line);
    if (iCount < iStart) or (iCount >= iStop)
      then WriteLn(fOut, line)
      else WriteLn(fOut, s[iCount - iStart]);
    Inc(iCount);
  end;
  CloseFile(fIn);
  CloseFile(fOut);
  DeleteFile(fileName);
  RenameFile(fn, fileName);
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
const
  fn = 'c:\daten\temp.txt';
begin
  with Memo.Lines do
  begin
    Clear;
    Add('123');
    Add('abc');
  end;
  // Zeilen 1 und 2 werden ersetzt, 0 bleibt erhalten
  ReplaceLines(Memo.Lines, fn, 1);
end;
saftey code musst du selbst einbauen. Die Ersetzung von nicht existierenden Zeilennummern wird einfach ignoriert.

Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 16: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