mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Datenauswertung


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe im Moment ein kleines Problem bei der Datenauswertung, un
zwar:

Ich logge im Moment alle möglichen Werte meiner Controlleranwendung in
eine Textdatei. Das ganze geschieht in Tabellenform. Normalerweise
werte ich dann anschließend meine Daten mit Excel aus. Nun habe ich
aber das Problem, dass ich mehr als 65536 Zeilen in meiner Datei habe
und Excel somit die Dateien nichmehr komplett verarbeiten kann. Ein
weiteres Problem ist, dass mein Logprogramm Teilweise Fehler in der
Textdatei erzeugt, sodass ab und zu in einer Zeile nicht alle Messwerte
eingetragen wurden oder es werden Buchstaben eingetragen. Aus diesem
Grund meckert z.B Matlab, wenn ich die Datei laden will (Matrix Format
passt nicht). Wenn ich nun Versuche die Datei mit einem Texteditor zu
teilen, dann stürtzt dieser immer ab, sodass ich damit auch nicht
weiterkomme (habe mehrere getestet). Meine Dateien haben so ca. 20 bis
25MB.

Hat vielleicht von euch einer eine Idee wie man diese Dateien am besten
verarbeiten oder teilen kann? Idealerweise wäre ein Programm, bei dem
man angeben kann, wo man die Datei teilen will. Oder ein Programm zu
graphischen Darstellung von Daten, idealerweise mit Autofiltern,
welches auch mit Formatfehlern zurecht kommt.

Hoffe ihr könnt mir helfen!

Viele Grüße,

Ralf

Autor: harry (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

habe eine ähnliche anwendung, daten werden in textfile eingetragen. wie
bei dir, selten, aber in manchen datensätzen steht müll drin, warum auch
immer.
ich verwende zur weiteren bearbeitung filemaker, ein simples
datenbanksystem. realistische obergrenze für anzahl datensätze ist bei
ca. 2-3.000.000, reicht für meine anwendung.
die effektivste und schlankste version ist fm3 oder fm4, alle danach
kommen mit reichlich firlefanz daher, sind langsamer und teurer,
ausserdem ist fm3+4 noch netzwerkfähig, der rest nicht, da gibt's dann
für extra-kohle 'ne server-version.
hab meine lizenz über ebay für um 30,- bekommen.
geht auch noch mit mysql (aufwendig), dbase (nur msdos-mode, spätere
versionen umständlich und blöd), acces (grottenlahm), dbfast (ganz
brauchbar), aber am besten filemaker, der ist echt unkritisch beim
einlesen und datenmüll findest du superzackig per filter.

gruss, harry

Autor: axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ralf,

Probier doch mal UltraEdit32. das nehm ich immer für solche Fälle, wenn
was von Hand zu trimmen sein soll.

Viele Grüße
Axel

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls Du ein bischen Perl kannst bzw. es lernen willst: Unter
http://cpan.uwinnipeg.ca/dist/Spreadsheet-WriteExcel-Simple
gibt es ein passendes Perl-Modul zum erstellen von Excel-Dateien mit
nur einer handvoll Befehlen. Selbst wenn Du noch kein Perl kannst
sollte sich damit innerhalb ein paar Stunden unter Verwendung von
diversen Perl-Tutorials ein einfacher txt->excel-Wandler in < 10 Zeilen
schreiben lassen.

Stefan

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
{http://www.mikrocontroller.net/forum/read-1-105027.html}
Schreib doch schnell selbst ein Programm,
in C oder Pascal ist das gleich vorbei.

Wenn Du nichts hast, TurboPascal 5.5 kann man bei Borland kostenlos
runterladen, ist zwar noch DOS und wenig komfortabel,
funktioniert aber für solche Zwecke tadellos.

die if-then-Abfrage musst Du an Deine Aufgabe anpassen,
hier gibt sie die erste Zeile aus (nach Alt-F5 sichtbar),
die nicht-Ziffern enthält.
Du kannst auch ab einer Zeilennummer ein in ein weiteres File schreiben
oder beliebig anderes tun.



Save file mit F2, compile mit F9, run mit Ctrl+F9,
show output mit Alt+F5, quit mit Alt+X

http://community.borland.com/article/0,1410,20803,00.html

Turbo C 2.01
http://community.borland.com/article/0,1410,20841,00.html
}

var i,z:integer;r,w:text;s:string;
begin
  assign(r,'readfile.txt');reset(r);z:=0;
  assign(w,'writefil.txt');rewrite(w);
  repeat readln(r,s);inc(z);
    for i:=1 to length(s) do begin
      if (s[i]<'0') or (s[i]>'9') then begin
        writeln('Zeile ',z,' ',s);close(w);halt end
      end;
    writeln(w,s) until eof(r);
  close(w) end.

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zu Problem 2:
Hab das speziell noch nicht gemacht, aber vielleicht
schreibst du in Excel (z.B. VBA) ein paar Zeilen Code,
welcher Dir den Datenmüll entsorgt. Oder du synchronisierst deine
Datenausgabe in deinem Logger besser, so dass nur vollständige
Datensätze ausgegeben werden.

Gruß,
Micha

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

ohne das Datenformat genau zu kennen kann ich natürlich nicht perfekt
helfen.

Was verstehst du unter Datenauswertung? Diagramm zeichnen? Dann schau
dir mal gnuplot an. Das kann mit großen Datensätzen problemlos umgehen.
Mit defekten Zeilen kommt gnuplot seit Version 4 auch relativ gut klar.

Um die Datei auf korrekte Datensätze zu untersuchen reicht evtl. grep
und eine passende regex aus.


Matthias

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für die vielen Antworten! Selber programmieren wollte ich
eigentlich nichts, da ich das ganze auf der Arbeit mache und z.Zt nicht
so viel Zeit dafür habe. Das Logging besser zu synchronisieren ist auch
eher schwer, da ich ein Programm der Firma verwende, welches nichtmehr
gepflegt wird und noch so einige Macken hat.
@Matthias: gnuplot hört sich gut an. Ich habe gedacht, dass dieses
Programm ähnlich wie Matlab auf falsche Formatierungen reagiert. Aber
ich habe mich auch noch nicht damit beschäftigt. Das wird sich dann
jetzt wohl mal ändern ;-) Die Formatierungen meiner Dateien ist relativ
einfach. Zuerst kommt eine Zeile Header mit Datum und Uhrzeit, dann eine
Zeile mit Variablennamen, welche ich gerade loggen will und darunter
kommen dann Zahlenwerte. Das ganze sieht also wie eine Tabelle aus. Ich
glaube, dass die Werte alle mit Tabs voneinander getrennt sind.

Viele Grüße,

Ralf

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

das ist doch die Anwendung für gnuplot. Bedarf zwar einer gewissen
Einarbeitung, funktioniert dann aber sehr gut.

Matthias

Autor: Großes Fragezeichen (112)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mal eine dumme Frage:

gibt es ein Limit in einer Textfile-Datei, bis zu der man noch Daten 
speichern kann?

habe nämlich ein ähnliches Problem. Excel kann keine genügend großen 
Dateien bearbeiten...

Dann zur Bearbeitung: Datenmüll wird voraussichtlich in keiner Zeile 
stehen, daher wäre MATLAB wohl kein so großes Problem bei der 
Bearbeitung. Müsste nur in der Kopfzeile ein paar Zeilen löschen und 
dann verbleiben reine Zahlenwerte...

Wie verhält sich MATLAB damit? Kann MATLAB Datensätze im 
Million-Anzahl-Bereich einlesen oder wird das Programm dann unendlich 
lahm und ist nur noch in der Theorie dazu bereit?

mfg

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Großes Fragezeichen schrieb:

> gibt es ein Limit in einer Textfile-Datei, bis zu der man noch Daten
> speichern kann?

Das wird bestimmt, durch das Dateisystem des Datenträgers (FAT: 2GB)

> habe nämlich ein ähnliches Problem. Excel kann keine genügend großen
> Dateien bearbeiten...

Die neueren Versionen sollen diesbezüglich deutlich aufgebohrt worden 
sein,
ob die Daten dann aber noch handhabbar sind, steht aud einem anderen 
Blatt.

> Wie verhält sich MATLAB damit? Kann MATLAB Datensätze im
> Million-Anzahl-Bereich einlesen oder wird das Programm dann unendlich
> lahm und ist nur noch in der Theorie dazu bereit?

Zu MATLAB kann ich wenig sagen, allerdings aus den Erahrungen mit
Beitrag "Re: Visualisierung von geloggten Daten"
kann man bei einigen 10 000 Datensätzen a einigen 'zig Messwerten schon 
mal mit einer Minute Wartezeit für den Plot der gesamten Datei, je nach 
Rechner kalkulieren.
mfG ingo

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
MATLAB wird beim Einlesen von großen Datensätzen durch seine 
Speicherverwaltung gebremst. 500MB Daten aus einer Textdatei sind kein 
Problem, wenn du den Speicher vor dem Einlesen auf einen Schlag 
allokierst.

daten=zeros(nZeilen,zeilenlaenge);

Die Länge deiner Zeilen kennst du ja, die Anzahl musst du evtl. aus der 
Dateigröße abschätzen. Wenn du in der Datei Punkte als Dezimaltrenner 
verwendest und alle Zeilen (bis auf den Header) die gleich Länge haben 
kannst du die Daten zeilenweise in die allokierte Matrix schreiben.

daten(iZeile,:)=fgetl(fid);

Die mitgelieferten textread und dlmread Funktionen halte ich bei 
größeren Datenmengen für ungeeignet.

@ingo:
Kann ich nicht nachvollziehen. Auf meinem 4 Jahre altem PC kriege ich 
eine 100x10000 Matrix in ca. 4s zu einer 3D Oberfläche geplottet.

Viel Spass!
Stephan
p.s.
Das Ganze gilt natürlich auch für GNU-Octave.

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.