![]() |
Zeilen in einer Stringlist vervollständigen
Hi Leute,
Ich steh gerade voll auf dem Schlauch. Ich hab eine CSV Datei die ich in eine Stringlist einlese. Nun Möchte ich an jede Zeile in der Stringlist noch was ranhängen.Auserdem muss ich der CSV noch einen Kopf verpassen, also eine erste Zeile. BSPl. Kopf: 1;2;3;4;5;6;7 Inhalt: 1bla;blu;hallo;weg -->da muss jetzt noch ;wo;wer;warum rangehängt werden 2bla;blu;hallo;weg -->da muss jetzt noch ;wo;wer;warum rangehängt werden 3bla;blu;hallo;weg -->da muss jetzt noch ;wo;wer;warum rangehängt werden Kann mir jemand helfen? mfg BOFH |
Re: Zeilen in einer Stringlist vervollständigen
Eine "Titelzeile" einfügen kannst du mit StringList.Insert.
Einen String am Ende ergänzen kannst du einfach mit Stringlist[x]:=StringList[x]+';wer;wo;warum'. Das liegt aber doch nahe, oder? Schleifen in Delphi solltest du beherrschen. Ansonsten gilt: Einfach mal alles in der Online-Hilfe zu TStringList durchstöbern. Auf Insert z.B. wärst du dann ganz von alleine gekommen. |
Re: Zeilen in einer Stringlist vervollständigen
Das anfügen weiterer Daten in einer Zeile kannst du auch über den Weg einer zweiten Stringlist machen.
D.h. jede Zeile per DelimitedText in eine zweite Stringliste lesen, Zeilen mit Append, Add oder Insert einfügen und DelimitedText wieder in die Zeile schreiben. Es kommt auf den Umfang des Ganzen an. Und nicht vergessen, den Delimiter auf ';' zu stellen. René |
Re: Zeilen in einer Stringlist vervollständigen
Zitat:
Ich lasse da immer die Finger von und nutze eigene Routinen, wenn ich CSV-Dateiinhalte aufdröseln muss. |
Re: Zeilen in einer Stringlist vervollständigen
Zitat:
|
Re: Zeilen in einer Stringlist vervollständigen
Zitat:
Wie es ausschaut muss sein Programm die Zeilen auch gar nicht aufdröseln, sondern lediglich die CSV-Datei erweitern. Daher würde ich zumindest das Delimiter-Risiko ausschließen und es schlicht nicht verwenden. Ein Beispiel, was gegen Delimiter spricht und mir gerade so auf Anhieb einfällt, ist: Wenn eine CSV-Datei aus Excel eine Zelle mit Inhalt Eine Zelle mit fünf Wörtern enthält, so macht Delimiter da fünf einzelne Zellen draus, da es - wenn keine Quote-Zeichen beteiligt sind (in Excel das ") - die Leerzeichen (auch) als Zellentrenner ansieht. :!: |
Re: Zeilen in einer Stringlist vervollständigen
CSV ohne Quotes sollte man deshalb auch niemals verwenden. :shock:
Bofh - der ja die eigentliche Frage gestellt hat - hat leider keine weiteren Angaben gemacht. Ich gehe aber aus seiner Fragestellung davon aus, dass er die Inhalte selbst hinzufügt, und nicht aus einem Fremd-Programm importiert. In diesem Fall spricht nichts gegen die Verwendung von DelimitedText. Das ist nicht "etwas richtig", sondern in diesem Falle optimal. |
Re: Zeilen in einer Stringlist vervollständigen
Zitat:
Aber bezogen auf Delphi würde ich dir das sofort unterschreiben. Excel jedenfalls (be)schreibt eine Zelle nur dann in einschließenden Quotes, wenn das Trennzeichen oder das Quotezeichen selbst in der Zelle vorkommt. Leerzeichen nimmt Excel so, wie sie in der Tabelle stehen. Sie sind für Excel einfach nur ein Zeichen ohne weitere Bedeutung - ganz im Gegenteil zu DelimiterText. Das Problem ist ganz einfach: CSV ist nicht genormt. Ich behaupte jedoch, dass die meisten CSV-Dateien auf der Welt deshalb existieren, weil es Excel gibt. Die meisten CSV-Dateien werden also von Excel erzeugt oder von ihm eingelesen. Aus diesem Grund empfinde ich den Excel-CSV-Aufbau als Quasi-Standard und richte all mein "CSV-Tun-und-Lassen" darauf hin aus. Daher verbietet sich mir die Benutzung von DelimiterText. ((Anmerkung: Wie Delphi (zumindest D7) das Leerzeichen behandelt, steht in der Hilfe unter TStrings.CommaText. Bei TString.DelimiterText schweigen sie sich dazu leider völlig aus.)) Okay, den "CSV-Neulingen" hier möge unsere kleine Diskussion etwas gebracht haben ... :cheers: |
Re: Zeilen in einer Stringlist vervollständigen
Danke für die Denkanschubser :-)
meine Lösung :coder2:
Delphi-Quellcode:
mfg
procedure TForm1.Button2Click(Sender: TObject);
var sl : tstringlist; kopf :string; iii: Integer; begin sl := tstringlist.Create; kopf := '1;2;3;4;5;6;7'; sl.LoadFromFile('tmpExcel.csv'); for iii := 0 to sl.Count - 1 do begin sl[iii] :=sl[iii]+ ';wer;wo;warum'; end; sl.Insert(0,kopf); sl.SaveToFile(ExtractFilePath(ParamStr(0))+'Datei.csv'); Memo4.Lines.LoadFromFile(ExtractFilePath(ParamStr(0))+'Datei.csv'); end; BOFH |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 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