Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi txt-Datei überspeichern (https://www.delphipraxis.net/109761-txt-datei-ueberspeichern.html)

Hermann85 7. Mär 2008 08:29


txt-Datei überspeichern
 
Hallo,
Ich habe eine txt-datei ind einer Stringlist geladen und bearbeitet. Nun möchte ich das wieder in der selben datei speichern. Das geht aber nicht.
Wenn ich es allerdings in einer anderen Datei abspeicher funktionierts super.
Aber es muss doch gehn, dass ich die alte Datei überspeichern kann.
Hier erst mal mein Code:
Delphi-Quellcode:
procedure TForm1.bt_konvertierenClick(Sender: TObject);
var Datei : String;
    txt_Dokument : TStringlist;
    erste_Zeile : String;
begin
  Datei := Pfad;
  txt_Dokument := TStringlist.Create;
  txt_Dokument.LoadFromFile(Datei);
  erste_Zeile := copy(txt_Dokument.Text,0,17);
  txt_Dokument.Add(erste_Zeile);
  txt_Dokument.SaveToFile(Datei);
end;
Danke schon mal im Vorraus

Grüße Hermann

DeddyH 7. Mär 2008 08:31

Re: txt-Datei überspeichern
 
Was heißt "geht nicht"? Fehlermeldung?

Hermann85 7. Mär 2008 08:33

Re: txt-Datei überspeichern
 
nein...es passiert gar nichts...er arbeitet den befehl ab und nix passiert

DeddyH 7. Mär 2008 08:37

Re: txt-Datei überspeichern
 
Und so?
Delphi-Quellcode:
procedure TForm1.bt_konvertierenClick(Sender: TObject);
var Datei : String;
    txt_Dokument : TStringlist;
    erste_Zeile : String;
begin
  Datei := Pfad;
  txt_Dokument := TStringlist.Create;
  try
    txt_Dokument.LoadFromFile(Datei);
    erste_Zeile := copy(txt_Dokument.Text,0,17);
    txt_Dokument.Add(erste_Zeile);
    txt_Dokument.SaveToFile(Datei);
  finally
    txt_Dokument.Free;
  end;
end;
Allerdings glaube ich selbst nicht daran, dass so das Problem gelöst ist :mrgreen:

Hermann85 7. Mär 2008 08:42

Re: txt-Datei überspeichern
 
hast du recht...hat leider nicht funktioniert

DeddyH 7. Mär 2008 08:43

Re: txt-Datei überspeichern
 
Benutz doch mal statt der StringList z.B. eine ListBox, damit Du sehen kannst, wie weit Du kommst. Ich kann mir nicht vorstellen, dass es nur am SaveToFile liegt.

Klaus01 7. Mär 2008 08:46

Re: txt-Datei überspeichern
 
Zitat:

Zitat von Hermann85
Hier erst mal mein Code:
Delphi-Quellcode:
procedure TForm1.bt_konvertierenClick(Sender: TObject);
var Datei : String;
    txt_Dokument : TStringlist;
    erste_Zeile : String;
begin
  Datei := Pfad;
  txt_Dokument := TStringlist.Create;
  txt_Dokument.LoadFromFile(Datei);
  erste_Zeile := copy(txt_Dokument.Text,0,17);
  txt_Dokument.Add(erste_Zeile);
  txt_Dokument.SaveToFile(Datei);
end;
Danke schon mal im Vorraus

Grüße Hermann

Guten Morgen,

Was bezweckst Du denn damit?
Du kopierst aus dem Text der StringList einen Bereich von 0 bis 17
in einen String. Diesen String fügst Du an das Ende der StringList an.
Du speicherst also die bisherige StringList und zusätzlich am Ende die "erste_Zeile".
Ist es das was Du willst?
Wenn Du nur die erste Zeile speichern willst solltest Du die StringList
bevor die erste Zeile angefügt wird "clearen".

Grüße
Klaus

Hermann85 7. Mär 2008 08:52

Re: txt-Datei überspeichern
 
@DeddyH: wie gesagt, wenn ich es in einer anderen Datei speichere speicherts mir das auch richtig. Also es muss irgendwie an dem SaveToFile liegen

@Klaus: ich möchte eigentlich nur, dass die erste Zeile auch die letzte Zeile ist. Das sind Eckdaten eines Polygons, und wenn sie nicht den selben Anfangs- und Endpunkt haben ist es ja kein Polygon mehr.

DeddyH 7. Mär 2008 08:54

Re: txt-Datei überspeichern
 
Blöde Frage, aber hast Du Delphi und Windows mal neu gestartet?

Hermann85 7. Mär 2008 08:57

Re: txt-Datei überspeichern
 
Da ich das Problem gestern schon hatte...und es mir irgendwann zu bunt wurde und feierabendgemacht habe...habe ich windows und delphi heut morgen neu gestartet

DeddyH 7. Mär 2008 08:58

Re: txt-Datei überspeichern
 
Häng doch mal die Datei an.

Hermann85 7. Mär 2008 09:07

Re: txt-Datei überspeichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
is nich viel dazu

SirThornberry 7. Mär 2008 09:10

Re: txt-Datei überspeichern
 
was mir grad ins Auge springt :cyclops: :
Delphi-Quellcode:
copy(txt_Dokument.Text,0,17);
Strings sind nicht 0 basiert sondern 1 basiert. Dementsprechend ist das erste Zeichen bei Position1. Das mag vielleicht nicht der Fehler sein aber bei copy eine 0 als Startindex zu übergeben ist schon fast ein verbrechen.

Und warum überhaupt so kompliziert? Mir scheint es als willst du die gesammte erste Zeile. Warum dann nicht einfach:
Delphi-Quellcode:
if txt_Dokument.count > 0 then
  erste_Zeile := txt_Dokument.strings[0]
else
  erste_Zeile = '';
Damit brauchst du nichts umbauen wenn die Zeilen mal etwas länger werden.

DeddyH 7. Mär 2008 09:10

Re: txt-Datei überspeichern
 
Also, bei mir funktioniert es. Bist Du sicher, dass die Variable "Pfad" richtig belegt ist?

[edit] Fipptehler :mrgreen: [/edit]

[edit2]Hier mal meine Version:
Delphi-Quellcode:
var txt_Dokument : TStringlist;
begin
  txt_Dokument := TStringlist.Create;
  try
    txt_Dokument.LoadFromFile(Pfad);
    if txt_Dokument.Count > 0 then
      begin
        txt_Dokument.Add(txt_Dokument[0]);
        txt_Dokument.SaveToFile(Pfad);
      end;
  finally
    txt_Dokument.Free;
  end;
end;
[/edit2]

Hermann85 7. Mär 2008 10:35

Re: txt-Datei überspeichern
 
so...hab meinen Fehler gefunden...hat wirklich nichts mit saveToFile zu tun gehabt

ich hatte die Datei mit dem selben button vorher mit einem anderen programm erstellen lassen. das war allerdings langsamer als mein programm. und solange ich die datei nicht aus dem pfad gelöscht hatte, hat es vorher die datei bearbeitet und gespeichert und dann wieder mit der neu erstellten datei überspeichert.

naja...nach langem probieren hab ich es jetzt hinbekommen
trotzdem danke

@SirThornberry: ich programmier noch nicht so lange, deswegen kenn ich noch nicht alle befehle aber danke für den tip

grüße Hermann


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz