Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   CSV in Array (https://www.delphipraxis.net/189885-csv-array.html)

michael.cohrs 4. Aug 2016 05:49

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

Rollo62 4. Aug 2016 06:59

AW: CSV in Array
 
Ich weiss nicht genau was du machen willst, aber ich würde das mit TStringList statt TObjectList machen.
http://www.delphibasics.co.uk/RTL.asp?Name=tstringlist

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

Sherlock 4. Aug 2016 07:08

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:
for string in StringList
auch klingen mag, es ist so performant wie Urgroßmutter am frühen Sonntagmorgen. Finger weg davon.

Sherlock

michael.cohrs 4. Aug 2016 07:11

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:

Sherlock 4. Aug 2016 07:34

AW: CSV in Array
 
Einfach:
Angenommen Deine csv-Datei sei im ANSI-Format und habe als Feldtrenner das Semikolon.
Delphi-Quellcode:
 
  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;
Nicht vergessen alles beizeiten wieder freizugeben, und eine Fehlerbehandlung sollte auch drum rum. Ich empfehle mindestens ein try...finally.

Sherlock

michael.cohrs 4. Aug 2016 07:37

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

michael.cohrs 4. Aug 2016 09:51

AW: CSV in Array
 
Hallo nochmals,

kann es sein das Delphi6 StricDelimiter noch nicht kennt?

nahpets 4. Aug 2016 09:58

AW: CSV in Array
 
Zitat:

Zitat von michael.cohrs (Beitrag 1344139)
Hallo nochmals,

kann es sein das Delphi6 StricDelimiter noch nicht kennt?

Ja, erst ab Delphi 7 vorhanden.

Oh, gerade nochmal nachgeprüft, Delphi 7 kennt das auch noch nicht. :-(

p80286 4. Aug 2016 10:23

AW: CSV in Array
 
versuch es doch mal hier mithttp://www.delphipraxis.net/110025-c...v-dateien.html
und hier:
http://www.delphipraxis.net/174012-c...-einlesen.html
Gruß
K-H

Sherlock 4. Aug 2016 13:17

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 04:10 Uhr.
Seite 1 von 2  1 2      

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