AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

CSV-Datei in Stringgrid bringen

Ein Thema von peschai · begonnen am 4. Jun 2009 · letzter Beitrag vom 11. Nov 2009
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#11

Re: CSV-Datei in Stringgrid bringen

  Alt 6. Nov 2009, 07:05
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;
Peter Schaible
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
440 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: CSV-Datei in Stringgrid bringen

  Alt 6. Nov 2009, 07:43
Hallo,

Bei Deiner Delphi Version kann alles mit Bordmitteln gelöst werden.
Das Zauberwort heisst TStringList.StrictDelimiter.

Gruss Werner
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#13

Re: CSV-Datei in Stringgrid bringen

  Alt 6. Nov 2009, 08:26
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 ....
Peter Schaible
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: CSV-Datei in Stringgrid bringen

  Alt 6. Nov 2009, 19:19
Zitat von peschai:
Das Beispiel mit dem TCSVReader verwendet im Prinzip eine ähnlichen Ansatz indem er schaut ob pro Zeile die Spaltenanzahl stimmt. Wenn nicht, dann nimm nächste Zeile dazu ...
Äh. nö?
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:
aber es könnte sein, daß der Ansatz über die TStringlist effizienter ist ? ...
Wen interessiert das?
Lesbarkeit, Robustheit und Erweiterbarkeit sind viel wichtiger. Und da muss ich sagen, finde ich die Lösung mit dem TCSVReader irgendwie ...

Zitat von peschai:
Hier die Implementierung auf Basis von TStringList
Was ist j1? i7? i6? Wie ist fctLocalCharCount(i,j) definiert? Wo sind die Deklarationen? Das ist doch (entschuldige bitte) ein sehr unleserliches Codefragment. Wer soll den Code denn verstehen?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#15

Re: CSV-Datei in Stringgrid bringen

  Alt 11. Nov 2009, 07:52
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:
"j1" ist eine TStringlist welche mit LoadFromFile die CSV Datei am Stück eingelesen hat und da natürlich die Zeilenumbrüche noch nicht passen...
Zitat:
"i6, i7" sind vom Typ Integer
Zitat:
"s4, s5" sind vom Typ Strings
Wenn das Codefragment durchlaufen ist, dann entspricht eine Zeile von FStrings einer Zeile im zu füllenden Stringgrid.
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!)
Peter Schaible
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#16

Re: CSV-Datei in Stringgrid bringen

  Alt 11. Nov 2009, 08:09
Zitat von peschai:
Wer keine Fremdkomponente nutzen möchte, sondern eine einfache Funktion sucht, ...
Welcher Vorteil liegt in einer 'Fremdfunktion' ggü. einer 'Fremdkomponente'?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#17

Re: CSV-Datei in Stringgrid bringen

  Alt 11. Nov 2009, 09:30
Hallo,
Zitat von peschai:
... 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!)
Bedarf so direkt nicht, aber Interesse daran besteht. Wenn die Funktion gut ist, steigert das die Nachfrage und weckt dann den Bedarf.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
query

Registriert seit: 11. Jan 2007
12 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: CSV-Datei in Stringgrid bringen

  Alt 11. Nov 2009, 10:10
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 23:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf