AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zeilen in einer Stringlist vervollständigen
Thema durchsuchen
Ansicht
Themen-Optionen

Zeilen in einer Stringlist vervollständigen

Ein Thema von bofh · begonnen am 5. Mär 2007 · letzter Beitrag vom 6. Mär 2007
Antwort Antwort
bofh

Registriert seit: 3. Feb 2006
14 Beiträge
 
#1

Zeilen in einer Stringlist vervollständigen

  Alt 5. Mär 2007, 14:19
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
  Mit Zitat antworten Zitat
IngoD7

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

Re: Zeilen in einer Stringlist vervollständigen

  Alt 5. Mär 2007, 14:43
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.
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Zeilen in einer Stringlist vervollständigen

  Alt 5. Mär 2007, 15:46
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é
  Mit Zitat antworten Zitat
IngoD7

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

Re: Zeilen in einer Stringlist vervollständigen

  Alt 5. Mär 2007, 16:09
Zitat von smudo:
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.
Die DelimitedText-Geschichte interpretiert CSV-Dateien nicht hundertprozentig korrekt!
Ich lasse da immer die Finger von und nutze eigene Routinen, wenn ich CSV-Dateiinhalte aufdröseln muss.
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Zeilen in einer Stringlist vervollständigen

  Alt 5. Mär 2007, 16:18
Zitat von IngoD7:
...nutze eigene Routinen, wenn ich CSV-Dateiinhalte aufdröseln muss.
Ich meißtens auch - für den Normalfall sollte das Verfahren aber erstmal ausreichen.
  Mit Zitat antworten Zitat
IngoD7

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

Re: Zeilen in einer Stringlist vervollständigen

  Alt 5. Mär 2007, 16:40
Zitat von smudo:
Zitat von IngoD7:
...nutze eigene Routinen, wenn ich CSV-Dateiinhalte aufdröseln muss.
Ich meißtens auch - für den Normalfall sollte das Verfahren aber erstmal ausreichen.
Das sehe ich eigentlich nicht so, da für mich beim Programmieren ein "etwas richtig" nie ausreicht.

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.
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Zeilen in einer Stringlist vervollständigen

  Alt 5. Mär 2007, 16:53
CSV ohne Quotes sollte man deshalb auch niemals verwenden.
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.
  Mit Zitat antworten Zitat
IngoD7

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

Re: Zeilen in einer Stringlist vervollständigen

  Alt 5. Mär 2007, 17:50
Zitat von smudo:
CSV ohne Quotes sollte man deshalb auch niemals verwenden.
Das erzähle dann bitte mal Excel. Und so steht das z.B. auch nicht in Wikipedia.
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 ...
  Mit Zitat antworten Zitat
bofh

Registriert seit: 3. Feb 2006
14 Beiträge
 
#9

Re: Zeilen in einer Stringlist vervollständigen

  Alt 6. Mär 2007, 11:52
Danke für die Denkanschubser
meine Lösung

Delphi-Quellcode:
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;
mfg
BOFH
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:34 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