Re: CSV-Datei in Stringgrid bringen
Hier die Implementierung auf Basis von TStringList
Delphi-Quellcode:
// Neutralisierung Zeilenumbrüche innerhalb CSVZelle
try FStrings.BeginUpdate; FStrings.Capacity := j1.Count; i7 := j1.Count-1; i6 := -1; While (i6<i7) do begin // Loop Inc(i6); s4 := j1[i6]; If Odd(fctLocalCharCount(s4,c3)) then begin // Zeilenumbruch in Zelle erkannt, nächste Zeile(n) dazunehmen if (i6<i7) then begin Inc(i6); s5 := j1[i6]; s4 := s4 + #13#10 + s5; // eventuell weitere Zeilen While Not(Odd(fctLocalCharCount(s5,c3))) and (i6<i7) do begin Inc(i6); s5 := j1[i6]; s4 := s4 + #13#10 + s5; end; end else begin raise Exception.Create('CSV Parser Fehler in Zeile '+IntToStr(i6)); end; end; // Datenzeile in Pool speichern FStrings.Add(s4); end; finally FStrings.EndUpdate; end; |
Re: CSV-Datei in Stringgrid bringen
Hallo,
Bei Deiner Delphi Version kann alles mit Bordmitteln gelöst werden. Das Zauberwort heisst TStringList.StrictDelimiter. Gruss Werner |
Re: CSV-Datei in Stringgrid bringen
Hallo taveuni
Nein, es kann nicht mir Bordmitteln gelöst werden. Ja StrictDelimiter hat mit dem gesamten beiCSV zu tun, hilft mir aber nicht bei den zeilumbrüchen in den Zellen. StrictDelimiter wirkt Zeileweise und nicht Kompletttextweise. TStringlist.LoadFromFile, dann ist das Kind bereits in den Brunnen gefallen, egal mit oder ohne StrictDelimiter. Denn pro Quelltext-Zeile wird ein Stringlist Zeile erzeugt. StrictDelimiter wirkt nicht bei LoadFromFile oder bei LoadFromStream .... |
Re: CSV-Datei in Stringgrid bringen
Zitat:
Der TCSVReader liest nur die CSV-Datei spezifikationskonform ein. Ganz einfach. Zeile für Zeile. Innerhalb von Quotes wird weder ein Spaltenbegrenzer noch ein Zeileende erkannt, sonst schon. Das Gedöns drumherum habe ich nur gemacht, damit sich die StringGrid dynamisch an die maximale Spaltenzahl anpasst. Zitat:
Lesbarkeit, Robustheit und Erweiterbarkeit sind viel wichtiger. Und da muss ich sagen, finde ich die Lösung mit dem TCSVReader irgendwie ... Zitat:
|
Re: CSV-Datei in Stringgrid bringen
Hallo
Zu meinem implementierungs Beispiel in post #11 sollte ich noch etwas ergänzen, um die Lesbarkeit zu erhöhen (edit nicht mehr möglich): Zitat:
Zitat:
Zitat:
Mittels StrictDelimiter kann dann elegant die stringgrid Zeile für Zeile befüllt werden. Ich wollte hier keinen kompletten Beitrag zur CodeLibrary machen, sondern nur die Thematik der Zeileumbrüche innerhalb einer Zelle mit dem Ziel das in eien stringgrid zu überführen grundsätzlich diskutieren ... Robustheit, Lesbarkeit und auch Effizienz sind wichtig. Die Klasse TCSVReader löst und kapselt im Prinzip die von mir angesprochene Problematik, wie ich jetzt verstanden habe, aber dazu muss eine Fremdkomponente benutzt werden (TCSVReader!). Diese hat als weitere Vorteile bestimmt noch weitere Fähigkeiten. Wer keine Fremdkomponente nutzen möchte, sondern eine einfache Funktion sucht, welche eine CSV (incl Zeilenumbrüche) in z.b. eine Stringgrid einliest, der möge hier antworten und ich poste dann den kompletten source (aber nur wenn überhaupt Bedarf besteht!) |
Re: CSV-Datei in Stringgrid bringen
Zitat:
|
Re: CSV-Datei in Stringgrid bringen
Hallo,
Zitat:
|
Re: CSV-Datei in Stringgrid bringen
Aktuell hab ich da keinen Bedarf dran, aber früher und zukünftig sicher mal. Für andere gilt da sicher das selbe. Also zeig doch deinen kompletten Code. Das ist doch das schöne an diesem Forum, daß man hier oft Lösungen finden kann, ohne vorher lange nachfragen zu müssen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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