AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CSV in Array

Ein Thema von michael.cohrs · begonnen am 4. Aug 2016 · letzter Beitrag vom 4. Aug 2016
Antwort Antwort
Seite 1 von 2  1 2      
michael.cohrs

Registriert seit: 11. Nov 2005
Ort: Hamburg
130 Beiträge
 
#1

CSV in Array

  Alt 4. Aug 2016, 05:49
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

Vielen Dank und viele Grüße

Michael
Michael Cohrs
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#2

AW: CSV in Array

  Alt 4. Aug 2016, 06:59
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
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: CSV in Array

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

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
michael.cohrs

Registriert seit: 11. Nov 2005
Ort: Hamburg
130 Beiträge
 
#4

AW: CSV in Array

  Alt 4. Aug 2016, 07:11
Hallo Sherlock,

Danke für die Antwort, hast Du vieleicht einen kleinen Codesnipsel für mich? Ich blick irgendwie nicht da durch
Michael Cohrs
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: CSV in Array

  Alt 4. Aug 2016, 07:34
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
michael.cohrs

Registriert seit: 11. Nov 2005
Ort: Hamburg
130 Beiträge
 
#6

AW: CSV in Array

  Alt 4. Aug 2016, 07:37
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 Hilfe

und Danke für den Code Sherlock
Michael Cohrs

Geändert von michael.cohrs ( 4. Aug 2016 um 07:40 Uhr)
  Mit Zitat antworten Zitat
michael.cohrs

Registriert seit: 11. Nov 2005
Ort: Hamburg
130 Beiträge
 
#7

AW: CSV in Array

  Alt 4. Aug 2016, 09:51
Hallo nochmals,

kann es sein das Delphi6 StricDelimiter noch nicht kennt?
Michael Cohrs
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

AW: CSV in Array

  Alt 4. Aug 2016, 09:58
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.

Geändert von nahpets ( 4. Aug 2016 um 10:38 Uhr) Grund: War wieder mal zu schnell und ungenau :-(
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: CSV in Array

  Alt 4. Aug 2016, 10:23
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 ( 4. Aug 2016 um 10:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: CSV in Array

  Alt 4. Aug 2016, 13:17
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 +1. Es ist jetzt 04:43 Uhr.
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