www.mikrocontroller.net

Forum: PC-Programmierung Anfängerprobleme csv Datein einlesen


Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine CSV Datei in folgender Ausführung.
wert1,wert2,wert3,wert4
wert1,wert2,wert3,wert4
....usw.

ich möchte diese Datei jetzt einlesen. Da ich fast gar nicht 
programmieren kann, bevorzuge ich immer Basic :-)
Wie kriege ich also die Daten in mein Programm eingelesen. Könnte mir 
hier jemand einen kurzen Codeauszug geben, bzw. einige Links die mir 
weiterhelfen.

Meistens nutze ich free Basic oder ähnliche opensource Compiler.

vielen Dank
Horst

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Gockel ist dein Freund. Schau z.B. mal hier:
http://de.wikibooks.org/wiki/FreeBasic:_Dateien

Falls Gockel nicht verfügbar ist, hilft die althergebrachte Methode:
Kauf dir ein Buch.

Gruß
Joachim

Autor: Tom Ekman (tkon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuchs mit Excel (oder OpenOffice). Damit kannst du csv importieren 
und, sofern die Standardfunktionen nicht reichen, mittels VBA auch was 
programmieren

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
in vb kannst Du die split-Funktion nehmen.
Beispiel:
  ..

  Dim aData() As String
  Dim InputString As String

  InputString  = "wert1,wert2,wert3,wert4"
  aData = Split(InputString, ",")
  ..

In dem Array >aData< sind dann die "Werte" als Teste abgelegt.
Die kannst Du dann weiterverarbeiten.

Dieses machst Du für jede Zeile in Deinem cvs-File.

Bye
Klaus

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
sorry ich habe free Basic überlesen.
Ob es dort eine split-Funktion gibt weiss ich leider nicht.
Klaus

Autor: Niels Keller (niels-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CSV-Dateien sind (so wie ich das beurteilen kann) aber in der Regel 
Messdaten, die binär gespeichert sind. Das bedeutet, dass man Kenntniss 
über das Datenformat haben muss. Die Grundlage zu diese Aussage ist die 
Vermutung, dass die Daten von einer Montageanlage stammen.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein.

CSV-Dateien sind Textdateien.

Hat man in Excel beispielsweise folgende Tabelle:
+-----+-----+-----+--------+-----+
| 132 | 456 | 789 | abcdef | 147 |
+-----+-----+-----+--------+-----+
|  33 |   1 |   2 |    Oma | 888 |
+-----+-----+-----+--------+-----+
| 1.23|  77 |  22 |    Opa |   1 |
+-----+-----+-----+--------+-----+
, dann sieht die CSV-Datei etwa so aus:
132,456,789,"abcdef",147
33,1,2,"Oma",888
1.23,77,22,"Opa",1
Das sind keine Binärdaten (sonst könnte MS ja selbst nicht damit
umgehen :-)

Autor: Niels Keller (niels-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na dann ist es ja umso einfacher

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Niels Keller schrieb:
> Na dann ist es ja umso einfacher
Nicht unbedingt. Man muss dabei beachten das es immer einen Feldtrenner 
und einen Datensatztrenner gibt.

Angenommen der Feldtrenner sei " und der Datensatztrenner sei , dann ist 
folgendes eine gültige CVS Zeile:

"Hallo", "123.567", "In 0, nix", "hats ein Problem"

Jetzt wende auf diese Zeile mal ein Split mittels ',' an und du wirst 
sehen das du nicht das korrekte Ergebnis erhälts.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei ja strenggenommen der Datensatztrenner ein Zeilenumbruch ist :->

Autor: Heinz Brill (Firma: Privat) (hbrill)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab dir was angehängt, womit du
csv-Dateien mit 4 Spalten
mit einstellbarem Feldtrenner
einlesen kannst.

Evtl. genügt dir dieses kleine
Prog ja.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heinz Brill schrieb:
> Hab dir was angehängt, womit du
> csv-Dateien mit 4 Spalten
> mit einstellbarem Feldtrenner
> einlesen kannst.
Wäre ein kurzer Quelltext da nicht angebrachter, als ein Programm aus 
unbekannter Herkunft mit unbekanntem Zweck?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven P. schrieb:
> Wobei ja strenggenommen der Datensatztrenner ein Zeilenumbruch ist :->
Stimmt, es muss heißen Texttrenner, Feldtrenner und (bei mir nicht 
genutzt) Datensatztrenner. Das prinzip bleibt aber gleich ^_^

Autor: Heinz Brill (Firma: Privat) (hbrill)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hatte das schnell mal mit PureBasic zusammen
gepinselt (www.PureBasic.de).
Für mich einer der besten und schnellsten
Basic-Compiler, aber ist nicht kostenlos.
Demoversionen gibt es trotzdem.
Global sfile.s, text.s, zeile.s, ftrenner.s

Procedure LeseDatei(sfile.s, trenner.s)
ClearGadgetItems(0) 

If OpenFile(0, sfile)
   Repeat
     text = ReadString(0)
     If text <> ""
        zeile = ReplaceString(text, trenner, Chr(10)) 
        AddGadgetItem(0, -1, zeile)
     EndIf    
   Until Eof(0) <> 0
   CloseFile(0)   
   MessageRequester("Anzahl Zeilen", Str(CountGadgetItems(0)) + " Zeilen gelesen !", 0)
EndIf 
EndProcedure

If OpenWindow(0, 100, 100, 500, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   ListIconGadget(0, 5, 5, 790, 300, "Wert 1", 100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_MultiSelect)
   AddGadgetColumn(0, 1, "Wert 2", 100)
   AddGadgetColumn(0, 2, "Wert 3", 100)
   AddGadgetColumn(0, 3, "Wert 4", 100)
   
   ButtonGadget(1, 5,  310, 60, 20, "Start")
   ButtonGadget(2, 160,310, 60, 20, "Ende")
   TextGadget(4, 5, 340, 100, 20, "Feldtrenner (, ;)")
   StringGadget(5, 105, 340, 40, 20, ",")
   
   quit = 0 
   ftrenner = ","
    
   Repeat
     Event = WaitWindowEvent()
     If Event = #PB_Event_Gadget And EventGadget() = 1
        sfile = OpenFileRequester("Datei öffnnen", "C:\meinecvs.csv", "Csv (*.csv)|*.csv", 0)
        If sfile
        ftrenner = GetGadgetText(5)
           If ftrenner
              LeseDatei(sfile, ftrenner.s)
           EndIf   
        Else
            MessageRequester("Fehler !", "Kein Quell - Ordner gewählt !", 0)   
        EndIf   
     EndIf
     If Event = #PB_Event_Gadget And EventGadget() = 2
      quit = 1
     EndIf
   Until Event = #PB_Event_CloseWindow Or quit = 1
 EndIf

End

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.