Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   CSV-Reader. Schnelles lesen von CSV-Dateien (https://www.delphipraxis.net/110025-csv-reader-schnelles-lesen-von-csv-dateien.html)

alzaimar 22. Feb 2009 20:38

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Du müsstest die Unit noch einbinden ...

ekoplayer 23. Feb 2009 05:57

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?

alzaimar 23. Feb 2009 06:21

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Dir scheinen die Grundlagen der Programmierung mit Delphi/Pascal/ObjectPascal zu fehlen. Vielleicht wäre ein Crashkurs Delphi etwas für Dich. Danach kannst Du dir die Frage selbst beantworten. So würde das nichts werden.

Du kannst Dir auch die Beispiele anschauen, die bei Delphi dabei sind. Dort werden auch Units verwendet ("verwenden" englisch: 'to use' :zwinker: )

Der_Ventilator 7. Aug 2009 08:42

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:

132.187.93.175;255.255.255.0;448;8;0;0;005_MT_Schu l;;cache://global/deploy.shtml "HMZ_005_MT_Schul_2-1.ini";
wird im Memo nur als Kästchen angezeigt, hier im Forum mit japanischen Schriftzeichen.

Zitat:

灩摡牤渻瑥慭歳活摯汥漻瑰潩獮瀻數潭敤氻捯潫瑵朻潲灵愻瑵摨浯楡㭮瑳牡灴条㭥敲潳畬楴湯瀻慬晴牯㭭楦敬敳癲 牥昻汩獥牥敶扲歡爻浥瑯捥湯潳敬昻汩獥牥敶灲牯㭴敲潭整潣獮汯灥牯㭴敳楲污画極㭤睨摡牤猻慴畴㭳潭敤㭬慃档 卥穩㭥汃慥䍲捡敨湏散䌻牵敲瑮瑓瑡੥㌱⸲㠱⸷㌹ㄮ㔷㈻㔵㈮㔵㈮㔵〮㐻㠴㠻〻〻〻㔰䵟彔捓畨㭬挻捡敨⼺术潬慢 ⽬敤汰祯献瑨汭∠䵈彚〰張呍卟档汵㉟ㄭ椮楮㬢㈱〸ㅸ㈰㬴䅉㡸㬶⸰⸰⸰㬰⸰⸰⸰㬰⸰⸰⸰㬰㈭㈱㌳〻夻䍋こ㄰㐲 㬵䈰㘷䄷䔴㑁ㄴㄱ䍄㕂䘵〰㤱㤹㈰㐹㜶〻㄰㤹〹㤲㘴㬷协䈠住ⱔ传⁎䥄䭓䔻偓䥒位䌠㜵〲ㄻ〵〰昻污敳主坅䠠协੔ ㌱⸲㠱⸷㌹ㄮ㘷㈻㔵㈮㔵㈮㔵〮㐻㠴㠻〻〻〻㔰䵟彔捓畨㭬挻捡敨⼺术潬慢⽬敤汰祯献瑨汭∠䵈彚〰張呍卟档汵㉟ ㄭ椮楮㬢㈱〸ㅸ㈰㬴䅉㡸㬶⸰⸰⸰㬰⸰⸰⸰㬰⸰⸰⸰㬰㈭㈱㌳〻夻䍋こ㄰㐲㬲䕂䅂ㄴ䔹㑁㘴ㄱ䍄䘹
Verwendet mit BDS 2009

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.

franktron 7. Aug 2009 09:34

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Zitat:

Zitat von Der_Ventilator
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:

132.187.93.175;255.255.255.0;448;8;0;0;005_MT_Schu l;;cache://global/deploy.shtml "HMZ_005_MT_Schul_2-1.ini";
wird im Memo nur als Kästchen angezeigt, hier im Forum mit japanischen Schriftzeichen.

Zitat:

灩摡牤渻瑥慭歳活摯汥漻瑰潩獮瀻數潭敤氻捯潫瑵朻潲灵愻瑵摨浯楡㭮瑳牡灴条㭥敲潳畬楴湯瀻慬晴牯㭭楦敬敳癲 牥昻汩獥牥敶扲歡爻浥瑯捥湯潳敬昻汩獥牥敶灲牯㭴敲潭整潣獮汯灥牯㭴敳楲污画極㭤睨摡牤猻慴畴㭳潭敤㭬慃档 卥穩㭥汃慥䍲捡敨湏散䌻牵敲瑮瑓瑡੥㌱⸲㠱⸷㌹ㄮ㔷㈻㔵㈮㔵㈮㔵〮㐻㠴㠻〻〻〻㔰䵟彔捓畨㭬挻捡敨⼺术潬慢 ⽬敤汰祯献瑨汭∠䵈彚〰張呍卟档汵㉟ㄭ椮楮㬢㈱〸ㅸ㈰㬴䅉㡸㬶⸰⸰⸰㬰⸰⸰⸰㬰⸰⸰⸰㬰㈭㈱㌳〻夻䍋こ㄰㐲 㬵䈰㘷䄷䔴㑁ㄴㄱ䍄㕂䘵〰㤱㤹㈰㐹㜶〻㄰㤹〹㤲㘴㬷协䈠住ⱔ传⁎䥄䭓䔻偓䥒位䌠㜵〲ㄻ〵〰昻污敳主坅䠠协੔ ㌱⸲㠱⸷㌹ㄮ㘷㈻㔵㈮㔵㈮㔵〮㐻㠴㠻〻〻〻㔰䵟彔捓畨㭬挻捡敨⼺术潬慢⽬敤汰祯献瑨汭∠䵈彚〰張呍卟档汵㉟ ㄭ椮楮㬢㈱〸ㅸ㈰㬴䅉㡸㬶⸰⸰⸰㬰⸰⸰⸰㬰⸰⸰⸰㬰㈭㈱㌳〻夻䍋こ㄰㐲㬲䕂䅂ㄴ䔹㑁㘴ㄱ䍄䘹
Verwendet mit BDS 2009

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.

Das Zauberwort Heist Unicode :wink:

Der_Ventilator 7. Aug 2009 11:17

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?

franktron 7. Aug 2009 12:07

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Zitat:

Zitat von Der_Ventilator
Heist das, der normale Windowseditor speichert unter Windows XP im Unicodeformat, mit dem ein Memo nix anfangen kann?

Neine D2009 scheint das aber zu meinen und liest es im Unicodeformat ein und dann kommt soein mist dabei raus

BoolString 7. Aug 2009 21:05

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

alzaimar 8. Aug 2009 07:21

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.

BoolString 9. Aug 2009 22:35

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 11:00 Uhr.
Seite 3 von 5     123 45      

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