Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi append in Tstringlist einbauen (https://www.delphipraxis.net/86611-append-tstringlist-einbauen.html)

moperswings 16. Feb 2007 10:13


append in Tstringlist einbauen
 
Hallo,

ich habe eine Menge von Daten in einer Datei (zwischenspeicher.txt), die Zeilenumbrüche enthalten. Die Zeilenumbrüche mache ich raus mit
Delphi-Quellcode:
var daten: TSourcelist;
daten := TStringlist.create;
daten.loadfromfile('zwischenspeicher.txt');
daten.text := stringreplace (daten.text, #13#10, '', [rfreplaceall]);
Jetzt möchte ich die bereinigten Daten an einer anderen Datei(datensatz.csv) in eine neue Zeile anhängen.
Doch wie bekomme ich jetzt ein append dazwischen, bevor ich mit
Delphi-Quellcode:
daten.savetofile('datensatz.csv')
das ganze wieder schliesse!
Wahrscheinlich geht das einfacher als ich denke.
Hoffe, ihr könnt mir helfen!
moperswings

Jürgen Thomas 16. Feb 2007 10:28

Re: append in Tstringlist einbauen
 
Hallo,

eine Variante wäre:
Delphi-Quellcode:
var daten: TStringList;
    sTemp: string;
daten := TStringlist.create;
daten.loadfromfile('zwischenspeicher.txt');
sTemp := stringreplace (daten.text, #13#10, '', [rfreplaceall]);
daten.loadfromfile('datensatz.csv');
//  wenn Du ein neues Leerzeichen hinnimmst, dann:
daten.Add(sTemp);
//  oder direkt:
daten.Text := daten.Text + sTemp;
//  und abschließend speichern
daten.savetofile('datensatz.csv');
Alternativ kannst Du auch direkt an einen Delphi-Referenz durchsuchenTFileStream anhängen.

Bist Du sicher, dass Du jetzt ohne jedes Leerzeichen arbeiten willst? (Ich habe Deine anderen Diskussionen zum Thema CSV nur am Rande verfolgt.) Jürgen

moperswings 16. Feb 2007 10:30

Re: append in Tstringlist einbauen
 
Stimmt, dass mit den Leerzeichen war nur ein versehen.
Danke für den Tipp und den Hinweis.
Ich probier Deinen Vorschlag jetzt mal aus.

moperswings 16. Feb 2007 10:43

Re: append in Tstringlist einbauen
 
Bei
Delphi-Quellcode:
sTemp := stringreplace (daten.text, #13#10, [rfreplaceall]);
bekomme ich die Fehlermeldung inkompatible typen string und set!
set ist eine Menge!
Wo ist da der Zusammenhang?

ste_ett 16. Feb 2007 10:46

Re: append in Tstringlist einbauen
 
Bei dir fehlt ein Parameter. :)

Die Flags, die du für das Ersetzen setzt ([rfReplaceAll]), müssen eine Position nach hinten. :)
An der dritten Stelle wird ein String erwartet, deshalb der Fehler "Set <-> String".

mkinzler 16. Feb 2007 10:47

Re: append in Tstringlist einbauen
 
Es fehlt auch ein Parameter
Delphi-Quellcode:
sTemp := stringreplace (daten.text, #13#10, '', [rfreplaceall]);

Klaus01 16. Feb 2007 10:48

Re: append in Tstringlist einbauen
 
Zitat:

Zitat von moperswings
Bei
Delphi-Quellcode:
sTemp := stringreplace (daten.text, #13#10, [rfreplaceall]);
bekomme ich die Fehlermeldung inkompatible typen string und set!
set ist eine Menge!
Wo ist da der Zusammenhang?

stringreplace benötigt 4 Parameter
- Text indem die Zeichen ersezt werden sollen
- Zeichen die ersetzt werden sollen
- Zeichen die anstellen des zu ersetzenden Zeichen kommen
- Und ein set wie ersetzt werden soll.

Bei Dir fehlt ein Parameter.

Grüße
Klaus

marabu 16. Feb 2007 10:51

Re: append in Tstringlist einbauen
 
Hallo moperswings,

in einem anderen thread hattest du die Erkenntnis, dass du im Memo die Eigenschaft WantReturns ausschalten konntest um die unbenötigten Zeilentrenner los zu werden.

Um eine oder mehrere Textzeilen an eine Datei anzuhängen muss man nicht unbedingt die Zieldatei zuerst komplett in den Hauptspeicher laden - bei Log-Dateien mitunter gar nicht möglich. Es geht auch so:

Delphi-Quellcode:
procedure AppendToFile(s: TStrings; fn: TFileName);
var
  i: Integer;
begin
  with TFileStream.Create(fn, fmOpenWrite or fmShareDenyWrite) do
  begin
    Position := Size;
    for i := 0 to Pred(s.Count) do
    begin
      WriteBuffer(s[i][1], Length(s[i]));
      WriteBuffer(sLineBreak[1], Length(sLineBreak));
    end;
    Free;
  end;
end;
Das lässt sich natürlich auch in einer abgeleiteten Klasse unterbringen - wer will.

Grüße vom marabu

moperswings 16. Feb 2007 12:01

Re: append in Tstringlist einbauen
 
Jetzt läufts, das mit dem Parameter war mein Fehler, sorry!

@marabu
Ich habe bei meinen Memos überall die Zeilenumbrüche ausgeschaltet - und trotzdem habe ich Fehler in meiner Datei, die so keinen Sinn ergeben.
Am Editor scheint es nicht zu liegen. Die Daten werden mit den Umbrüchen gespeicht - und ich weiss, nicht warum.
Jetzt löse ich das Problem halt mit stringreplace.

Ich danke Euch und wünsche allen ein schönes Wochenende!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 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