![]() |
Re: CSV-Reader. Schnelles lesen von CSV-Dateien
Du müsstest die Unit noch einbinden ...
|
Re: CSV-Reader. Schnelles lesen von CSV-Dateien
also ich speicher die Datei csCSV.pas ab und dann erstelle ich ne neue Unit? und unter welchen Namen speicher ich die dann ab bzw. was muss ich daran noc ändern?
|
Re: CSV-Reader. Schnelles lesen von CSV-Dateien
Dir scheinen die Grundlagen der Programmierung mit Delphi/Pascal/ObjectPascal zu fehlen. Vielleicht wäre ein
![]() Du kannst Dir auch die Beispiele anschauen, die bei Delphi dabei sind. Dort werden auch Units verwendet ("verwenden" englisch: 'to use' :zwinker: ) |
Re: CSV-Reader. Schnelles lesen von CSV-Dateien
Woran könnte es liegen, wenn ich statt des Inhalts der CSV nur rechteckige Kästchen einlesen kann?
Sowas (mit den Editor geöffnet) Zitat:
Zitat:
Das CSV wurde mit einem Webinterface erstellt und gespeicht, leider bekomme ich auch nur Kästchen, wenn ich mit Notepad eine test.csv erstelle und selbst mit Daten fülle. |
Re: CSV-Reader. Schnelles lesen von CSV-Dateien
Zitat:
|
Re: CSV-Reader. Schnelles lesen von CSV-Dateien
Heist das, der normale Windowseditor speichert unter Windows XP im Unicodeformat, mit dem ein Memo nix anfangen kann?
|
Re: CSV-Reader. Schnelles lesen von CSV-Dateien
Zitat:
|
Re: CSV-Reader. Schnelles lesen von CSV-Dateien
Sehr cool! Ich muss viel mit CSV Dateien arbeiten (wobei wir die inzwischen als Char-Separated-Values betiteln ;-) Ich hab inzwischen viele Routinen geschrieben, die immer leichte Varianten und Abweichungen prozessieren.
Was du vielleicht noch überarbeiten soltest wären: - Property ab welcher Zeile die eigentlichen CSV Daten anfangen (häufig gibt es einen Header, der komplett anders aufgebaut ist und davor steht). - eine Comment Property, die alle Zeilen enthält, die nicht als Daten eingelesen werden sollen (z.B. die Zeilen des Headers). - Property für die Anzahl der Elemente pro Zeile (manchmal verrutschen Werte, wenn Messwerte nicht vorliegen, was zu Problemen führt, wenn man alles in eine Tabelle oder für weitere Berechnungen in eine Matrix schreibt). - Für manche Anwendungen ist es interessant, bei der internen Verarbeitung die Delimiter am Anfang einer Zeile zu löschen. - Für andere Anwendungen ist es interessant, mehrere aufeinanderfolgende Delimiter wie einen einzigen zu interpretieren. - eine Möglichkeit eine Zeile anzugeben, welche Spaltenüberschriften trägt (diese sind häufig anders zu prozessieren als die darauffolgenden Daten); quasi die Column Headers. - evtl. tatsächlich eine Option zur Unicode-Behandlung. Bin ja echt gerade am Überlegen, ob ich meine Routinen nicht endlich mal auf eine schicke Klasse umschreiben sollte (man bastelt ja immer so seine Provisorien und die halten dann ewig). Dein Ansatz würde sich mit einigen Anpassungen sehr schön eignen! Liebe Grüße aus ><)))°> Town Jan |
Re: CSV-Reader. Schnelles lesen von CSV-Dateien
Hallo Jan,
Ich halte deine Vorschläge für nicht unbedingt sinnvoll, denn sie lassen sich bereits durch die vorhandenen Eigenschaften implementieren bzw. gehören imho nicht in die Klasse: Du kannst zum Überspringen der ersten Zeilen die 'Next' Methode ein paar mal aufrufen. Weiterhin gibt dir die Eigenschaft 'ColumnCount' für jede Zeile die Anzahl der Zellen/Spalten zurück. Die Prozessierung bzw. Behandlung des Inhaltes (=Interpretation) obliegt nicht der CSV-Klasse, sondern der benutzenden Anwendung. Die Darstellung als Matrix bzw. Dataset müsste diese Funktionalitäten bereitstellen: Hier geht es nur um das schnelle und korrekte Einlesen von Daten im CSV-Format. Einzig die Unicode-Behandlung wäre eine Option. Wobei es dann sinnvoller wäre, eine neue Klasse dafür zu implementieren. So wie ich das sehe, müssten die String/Var/PChar-Variablendeklarationen durch ihre Unicode-Pendants ersetzt und an der Stelle 'GetMem' die Anzahl mit 2 multipliziert werden. |
Re: CSV-Reader. Schnelles lesen von CSV-Dateien
Ich habe mir deinen Code mal etwas genauer angesehen. Mit einigen Punkten hast du recht. Das lag wohl an meiner ersten, eher oberflächlichen, Inspektion :oops: Die Interpretation war natürlich nicht Teil meines Vorschlags. Das habe ich wohl etwas Missverständlich ausgedrückt. Ist klar, daß sich jede Anwendung die Daten dann in ihr eigenes Datenhandlingkonstrukt stopfen muss.
Bezüglich der 'Lösche Delimiter am Anfang' und 'Mehrere aufeinanderfolgende als einen Delimiter interpretieren' ermöglicht es gleichzeitig Datenfiles mit fester Spaltenbreite zu importieren. Hier werden ja die ungenutzten Zeichen meist mit Leerzeichen aufgefüllt. Durch die angesprochenen Properties könnte man die dann mit verarbeiten (Deli:=SPACE; LöscheAnfangsDelis:=True; MuliDeliAsOne:=True). Ist aber nur ein Vorschlag; letztlich hast du natürlich recht, daß dies nicht CSV Dateien im eigentlichen Sinn sind. Es wäre aber eine Option diese gleich mit zu 'erschlagen' und sicherlich eine Aufwertung deines Codes. Ist ja aber nur ein Vorschlag; du hast ja danach gefragt ;-) Liebe Grüße Jan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 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