INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Bestimmte Daten aus csv Datei in Array schreiben



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

19.03.2014, 18:04
Beitrag #1

Serial Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 75
Registriert seit: Mar 2014

8.2
2013
DE



Bestimmte Daten aus csv Datei in Array schreiben
Guten Abend,

ich Rahmen eines Projekts meiner Hochschule bin ich an einem Projekt bei. Es erkläre die Problemstellung.

Ich habe eine .csv Datei, welche um die 200MB groß ist. Diese enthält vier Spalten mit Werten.

Dies sieht ungefähr so aus:

Header
Header
Header
wert,wert,wert,wert
wert,wert,wert,wert
wert,wert,wert,wert
wert,wert,wert,wert
wert,wert,wert,wert
wert,wert,wert,wert
wert,wert,wert,wert
wert,wert,wert,wert
wert,wert,wert,wert

Die Datei hat am Anfang und Ende ziemlich viele unnütze "nullen" welche nicht dargestellt werden müssen. Es erfolgt bei der Messung ein "Ereignis"

Es geht darum, die Messwerte in einem XY Plot darzustellen. Es ist mir schon gelungen, die csv Datei in vier Arrays zu zerlegen, damit ich diese als Quelle für den XY Graph benutzen kann. Das Problem besteht darin, dass das nur bei einer relativ kleinen Datei funktioniert. Bei einer zu großen Datei füllt sich der Arbeitsspeicher und es erscheint eine Fehlermeldung.

Mein Ansatz zur Lösung des Problems (was ich aber bisher noch nicht realisieren konnte):
1.
Bevor die Daten in die vier Arrays geschrieben werden, muss ich irgendwie hinbekommen, dass nur die Zeilen hineingeschrieben werden, welche eine bestimmte Schwelle überschritten haben. Es gibt eine Menge an Zeilen mit werten im 10^(-3) bereich. Also sobald einer der vier Werte kleiner als z.B. 0,1 ist, soll die ganze Zeile übersprungen werden. So wird nur der "wichtige" Augenblick in das Array geschrieben.

2.
Die csv Datei "analysieren" und bestimmen in welcher Zeile die Werte Größer werden. Dann einen definierten bereich abspeichern.



Wie gesagt, ich habe es hinbekommen dass es mit einer relativ kleinen Datei funktioniert (30MB). Aber mit der Originaldatei klappt es nicht.


MfG
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.03.2014, 18:49
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Bestimmte Daten aus csv Datei in Array schreiben
Zeig mal dein VI (i.e. bitte hochladen).

Wahrscheinlich musst du die Datei blockweise einlesen. Auf einen Schlag geht bei der Größe wahrscheinlich schief. Oder kannst du was an der Dateierstellung ändern? Dann bietet sich bei solchen Mengen TDMS als Dateiformat an.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.03.2014, 07:13
Beitrag #3

Serial Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 75
Registriert seit: Mar 2014

8.2
2013
DE



RE: Bestimmte Daten aus csv Datei in Array schreiben
(19.03.2014 18:49 )jg schrieb:  Zeig mal dein VI (i.e. bitte hochladen).

Wahrscheinlich musst du die Datei blockweise einlesen. Auf einen Schlag geht bei der Größe wahrscheinlich schief. Oder kannst du was an der Dateierstellung ändern? Dann bietet sich bei solchen Mengen TDMS als Dateiformat an.

Gruß, Jens

Okay, hier das VI


Angehängte Datei(en)
8.2 .vi  CSV_Datei_zu_Arrays_v.5.vi (Größe: 105,04 KB / Downloads: 485)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.03.2014, 09:06 (Dieser Beitrag wurde zuletzt bearbeitet: 20.03.2014 09:11 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Bestimmte Daten aus csv Datei in Array schreiben

Akzeptierte Lösung

Hallo Serial,

THINK DATAFLOW!

Als allererstes mal alle lokalen Variablen durch Drähte ersetzen. Du hast da nichts weiter als einen großen Haufen RACE CONDITIONS!
Dann die unsinnigen Konstrukte entfernen: Warum musst du dein X-Achsen-Array auf ein 2D-Array aufblasen?

Dann sollte es in etwa so aussehen:
   

Und immer daran denken: THINK DATAFLOW!

Dein eigentliches Problem besteht darin, dass du deine große Datei immer im Ganzen versuchst einzulesen. Dies wird bei großen Dateien unweigerlich zu einem "Memory full" führen, spätestens beim Umwandeln von String-Array nach DBL-Array. Dein "XY Graph ExpressVI" hat ebenfalls interne Speicher, auch die füllen sich und damit den Arbeitsspeicher!
Lösung:
Die Daten immer blockweise einlesen (z.B. mit jeweils 1000 Zeilen) und daran gleich deine Filterung vornehmen…

Und: Du bist nicht der erste mit diesem Problem. Es gibt sicherlich schon passende Lösungsvorschläge hier im Forum…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.03.2014, 09:13
Beitrag #5

Serial Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 75
Registriert seit: Mar 2014

8.2
2013
DE



RE: Bestimmte Daten aus csv Datei in Array schreiben
Vielen Dank schonmal.

Das X-Array habe ich nur zur besseren Übersicht zu einem 2D Array aufgeblasen. Ich muss noch dazu sagen, dass ich mich erst seit circa 5 Tagen intensiver mit LV beschäftige, daher die "Anfängerfehler".
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2014, 07:36 (Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2014 07:37 von Serial.)
Beitrag #6

Serial Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 75
Registriert seit: Mar 2014

8.2
2013
DE



RE: Bestimmte Daten aus csv Datei in Array schreiben
Jetzt funktioniert es. Ich habe eine FOR Schleife entwickelt, die immer x Zeilen aus der csv Datei liest und per Schieberegister in ein 1D-Array schiebt. Jedoch dauert es ziemlich lange, eine 200MB Datei einzulesen (bestimmt so 20 sekunden). Ich denke mal, dass das aufgrund der "schlechten" Hardware meines PCs auftritt (1 GHZ, 1GB Ram).

Oder ist das was in der Programmierung, was viel Rechenzeit kostet? Werde mir jetzt erstmal ein Kapite in einem Buch angucken zum Thema Professionelle Programmentwicklung.


Angehängte Datei(en)
8.2 .vi  csv_datei_Blockweise_einlesen.vi (Größe: 34,66 KB / Downloads: 380)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2014, 08:18
Beitrag #7

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Bestimmte Daten aus csv Datei in Array schreiben
Immer nur 10 Zeilen einlesen ist natürlich ziemlich wenig. Da kannst du schon mehr pro Durchlauf machen. Was du aber dringend machen musst: Verzichte auf Read From Spreadsheet-File und mach das File-Lesen & Wandeln nach Zahlen selber mit den Read-File Operationen. Dann sparst du dir nämlich das dauernde implizite File-Öffnen & -Schließen. Dann musst (!) du das Schieberegister mit einem leeren Array initialisieren, ansonsten hängst du bei mehrfachen Aufrufen des VIs immer wieder Daten an Datensätze aus anderen Files an.

Sehr viel ließe sich verbessern und optimieren, wenn du im File-Header eine Information über die Anzahl der Datensätze im File hättest. Dann könntest du ein Zahlen-Array vorinitialisieren. Das ständige Build-Array ist nämlich auch ein Zeitfresser.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2014, 13:51 (Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2014 13:53 von Serial.)
Beitrag #8

Serial Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 75
Registriert seit: Mar 2014

8.2
2013
DE



RE: Bestimmte Daten aus csv Datei in Array schreiben
Das mit den 10 zeilen stimmt. Also lieber mehr Zeilen pro Durchlauf verändern und dann dafür weniger Durchläufe.
Das mit dem Read-File Operationen versuche ich mal hinzubekommen (als verbesserung des programs). Den Header Analysieren ist auch kein Prolem, da kann man die Anzahl der Messpunkte herauslesen.


Gibt es eigentlich eine Möglichkeit, nachdem mein Programm durchgelaufen ist, das erstellte Array zu löschen?
Achja, und ich bin momentan am werkeln, wie man die Anzahl der Zeilen des Headers bestimmt. Ich weiss, dass es immer 10 Zeilen sind aber wäre besser das "allgemein" zu programmieren, falls der Header mal ne Zeile länger ist.


Angehängte Datei(en)
8.2 .vi  3_csv_datei_Blockweise_einlesen.vi (Größe: 51,82 KB / Downloads: 345)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2014, 14:06 (Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2014 14:07 von GerdW.)
Beitrag #9

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Bestimmte Daten aus csv Datei in Array schreiben
Hallo serial,

welches Array willst du "löschen"? Üblicherweise schreibt man dann eine leere Array-Konstante in eine lokale Variable des Array-Indicators…

Deine innere FOR-Loop könnte auch so aussehen:
   

Zitat:Achja, und ich bin momentan am werkeln, wie man die Anzahl der Zeilen des Headers bestimmt. Ich weiss, dass es immer 10 Zeilen sind aber wäre besser das "allgemein" zu programmieren, falls der Header mal ne Zeile länger ist.
Dazu sollte man wissen, wie der Header aussieht bzw. woran man das Ende des Headers oder den Anfang der Daten erkennt…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2014, 14:18
Beitrag #10

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Bestimmte Daten aus csv Datei in Array schreiben
@Gerd: Immer noch das uninitialiserte Shift-Register. Noe Das habe ich doch schon moniert!

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Mit ODBC Zugriff nur bestimmte Tabellen sichtbar TpunktN 4 4.800 19.08.2022 07:12
Letzter Beitrag: TpunktN
  PropertyNode Referenz zu Allen Array Elementen (XML schreiben) TpunktN 9 7.468 12.05.2020 08:08
Letzter Beitrag: TpunktN
  Array in XML schreiben MarcoN 7 9.610 24.02.2020 16:11
Letzter Beitrag: TpunktN
  TDMS-Daten direkt schreiben, nicht im RAM halten RabenFlug 2 3.811 12.04.2019 10:23
Letzter Beitrag: RabenFlug
  Datenstrom auf Knopfdruck in Datei schreiben (oder auch nicht) _Markus_ 4 6.004 30.10.2018 09:27
Letzter Beitrag: GerdW
  Daten in einem Access Datenbank schreiben galilio 10 14.296 01.05.2017 08:04
Letzter Beitrag: galilio

Gehe zu: