![]() |
CSV in Array
Guten morgen zusammen,
wieder einmal ein kleines Problem:? ich habe eine CSV Datei die ich Zeilenweise in ein Array lesen möchte. ich weiss im voraus nie wieviel Zeilen es werden. Dieses Array möchte ich im Anschluß in eine Objektliste speichern um hinterher die einzelnen Spalten auszuwerten. Die spalten sind ";" separiert. Kann mir dabei irgendjemand helfen, ich bekomme es einfach nicht hin:oops: Vielen Dank und viele Grüße Michael |
AW: CSV in Array
Ich weiss nicht genau was du machen willst, aber ich würde das mit TStringList statt TObjectList machen.
![]() Ich nehme mal an das die Datei mir CR LF als Delimiter gespeichert ist, dann brauchst du nur die LStringList.Text := LStringOrginalText; zu weisen, und und die StringList kann das zeilenweise Laden. Ansonsten kannst du mit den Delimitern rumspielen, siehe Link. Rollo |
AW: CSV in Array
Ja, Stringlist ist viel besser als Array. Auf jeden Fall noch StrictDelimiter := True einstellen. Sonst werden Leerzeichen ebenfalls als Trenner gewertet. Für das zeilenweis einlesen also den Delimiter auf das oder die Zeichen setzen, die zum Zeilenwechsel führen also zB #10 oder #13#10 falls du mit ANSI-Strings hantieren solltest.
Der Witz kommt dann, wenn du die einzelnen Zeilen auswerten möchtest. Du liest eine Zeile einfach wieder in eine StringList ein diesmal mit ';' als Delimiter und schon kannst Du in der neuen StringList die einzelnen Elemente ganz einfach per Nullbasiertem Index ansprechen. Kleiner Tipp noch am Rande, so verlockend ein
Delphi-Quellcode:
auch klingen mag, es ist so performant wie Urgroßmutter am frühen Sonntagmorgen. Finger weg davon.
for string in StringList
Sherlock |
AW: CSV in Array
Hallo Sherlock,
Danke für die Antwort, hast Du vieleicht einen kleinen Codesnipsel für mich? Ich blick irgendwie nicht da durch:cry: |
AW: CSV in Array
Einfach:
Angenommen Deine csv-Datei sei im ANSI-Format und habe als Feldtrenner das Semikolon.
Delphi-Quellcode:
Nicht vergessen alles beizeiten wieder freizugeben, und eine Fehlerbehandlung sollte auch drum rum. Ich empfehle mindestens ein try...finally.valueList := TStringList.Create; valueList.LoadFromFile('c:\temp\meine-datei.csv'); rowList := TStringList.Create; rowList.Delimiter := ';'; rowList.StrictDelimiter := True; for i := 0 to valuelist.count - 1 do begin rowList.DelimitedText := valueList[i]; // Falls Du eine Kopfzeile hast, solltest Du die vermutlich überspringen... ersterWert := rowList[0]; // So bekommst Du nur Strings, falls Du numerische Werte hast, entsprechend konvertieren. vierterWert := rowList[3]; end; Sherlock |
AW: CSV in Array
Die eigentliche Aufgabe besteht aus folgenden Bedingungen:
Die Exceldatei kann bis zu 1000 Spalten haben zuerst die Globalen Bezeichnungen, dann Spalten mit der Bezeichnung DATE100-DATA600 Die Spalten DATA100 müssen wie folgt ausgewertet werden: WENN DATA100 = '' oder DATA200 = '' oder DATA299 = '' dann Lösche diese Zeile, sonst dasselbe für DATA101.... bis DATA201 usw. danach dieselbe Prüfung ab DATA300 Alles was übrigbleibt(nicht gelöscht wurde) soll im Anschluß der Prüfung in eine Datenbank geschrieben werden. Ich hoffe ich habe es einigermaßen verständlich ausgedrückt. Vielen Dank für jede Hilfe8-) und Danke für den Code Sherlock |
AW: CSV in Array
Hallo nochmals,
kann es sein das Delphi6 StricDelimiter noch nicht kennt? |
AW: CSV in Array
Zitat:
Oh, gerade nochmal nachgeprüft, Delphi 7 kennt das auch noch nicht. :-( |
AW: CSV in Array
versuch es doch mal hier mit
![]() und hier: ![]() Gruß K-H |
AW: CSV in Array
Michael, hab Deine PN bekommen, Du willst aber keine empfangen ;)
Klappt denn der Ansatz von p80286? Ich weiss leider nicht was D6 kann und nicht kann, so daß ich kaum hilfreiche Antworten liefern kann. Sorry. Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 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 by Thomas Breitkreuz