Hallo alle zusammen,
ich möchte die gesampleten Daten in einem Xmega benutzen, da ich das
eigentliche Signal noch nicht habe, möchte aber die Auswertung trotzdem
anfangen zu programmieren. Wie mache ich es am besten?
Ich habe eine csv-Datei mit drei Spalten und 5000 Zeilen
(Komma-getrennt). Die Werte werden in Zukunft einem abgetasteten
Basisband-Datensignal entsprechen.
Danke,
DK
DK schrieb:> anfangen zu programmieren. Wie mache ich es am besten?> Ich habe eine csv-Datei mit drei Spalten und 5000 Zeilen> (Komma-getrennt).
Die Daten mittels Editor-Hexerei so aufbereiten, dass du sie in ein
Array (Array aus einer Struktur?) einbauen kannst.
Dann noch eine Funktion, die jeweils den nächsten Wert aus dem Array
liefert.
Das einzige was mir hierzu einfaellt waere Konstanten anzulegen und
denen den entsprechenden Index zuweisen, ist aber wider etwas aufwändig
bei so vielen Daten
DK schrieb:> Klingt gut, aber bei 5000 Werten?... Hmmm
Wo liegt das Problem?
Ein guter Programmiereditor hat eine Art Makrofähigkeit. Man zeigt ihm
die Sequenz, die er machen soll, geht dann mit dem Cursor in
Startstellung, legt einen Stein auf die Makrotaste und sieht dem Editor
zu, wie er sich durch die Datei durchkämpft.
Alternativ kann man sich natürlich immmer noch schnell ein C Programm
schreiben, welches die vorhandenen Daten liest und so ergänzt in einer
anderen Datei abspeichert, dass sie Compilertauglich werden.
Mittels Redirection auf der Command Line, ist das meist noch nicht mal
viel Aufwand. Oder man benutzt einen sed ...
Wie auch immer. Man muss halt seinen Werkzeugkasten kennen. Ich weiß ja
nicht, wie deine Daten aussehen und was man alles machen müsste, damit
sie C-tauglich werden.
Wenn du Bammel wegen der 5000 hast.
Du kannst ja auch abspecken.
Du kannst aber auch den jeweils nächsten Wert per UART vom PC
einspielen, wenn du es lieber komplizierter haben willst.
Du kannst aber auch die Auswertung an sich auf dem PC programmieren und
dort testen. Solange es um die reine Berechnung geht, ist das ja
(eventuell bis auf Datentypen) identisch und du brauchst dazu gar keinen
µC um die Auswertung erst mal in Schwung zu bekommen.
Möglichkeiten gibt es viele.
Ein Beispiel aus der csv-Datei:
-475.88060000,122.83460000,-53.54330000
-475.88050000,124.40940000,-51.96850000
-475.88030000,125.98420000,-55.11811000
-475.88020000,125.98420000,-56.69291000
-475.88010000,127.55900000,-55.11811000
-475.88000000,125.98420000,-58.26771000
-475.87990000,125.98420000,-56.69291000
-475.87980000,124.40940000,-58.26771000
-475.87960000,122.83460000,-58.26771000
-475.87950000,122.83460000,-56.69291000
...
Ich bin noch nicht so fit, was C-Programmierung angeht. Wäre schön da
ein paar Tipps zu bekommen!
DK schrieb:> Ich bin noch nicht so fit, was C-Programmierung angeht.
Wie willst du dann die Auswertung programmieren, wenn du in C nicht
soweit fit bist, dass du eine Zeile einliest, ein ',' hinten drann
hängst und das dann wieder ausgibst (das File-Handling machst du mittels
Command Line Redirection).
Was dir aber unter Umständen mehr bringt: Wenn du deinen Editor
durchforstest, welche Möglichkeiten der Automatisierung er dir bietet.
Für jeden halbwegs brauchbaren Programmier-Editor ist es ein Klacks
mittels eines Makros an jede Zeile hinten oder vorne noch was
anzuhängen. Sein Werkzeug zu kennen hat noch nie geschadet.
Karl heinz Buchegger schrieb:> Wie willst du dann die Auswertung programmieren, wenn du in C nicht> soweit fit bist
wenn es sein muss, dann lern man es eben ;-)
Karl heinz Buchegger schrieb:> Was dir aber unter Umständen mehr bringt: Wenn du deinen Editor> durchforstest, welche Möglichkeiten der Automatisierung er dir bietet.> Für jeden halbwegs brauchbaren Programmier-Editor ist es ein Klacks> mittels eines Makros an jede Zeile hinten oder vorne noch was> anzuhängen.
das werde ich ausprobieren, danke
DK schrieb:> Karl heinz Buchegger schrieb:>> Wie willst du dann die Auswertung programmieren, wenn du in C nicht>> soweit fit bist>> wenn es sein muss, dann lern man es eben ;-)
Dann tu das.
Alles was du für diese Umformung brauchst, sind C Grundlagen, die in
jedem noch so grindigen C Buch im ersten Drittel stehen.
Dazu musst du erst mal wissen, wie das Ergebnis überhaupt aussehen soll.
Das wiederrum richtet sich danach, wie du deinen Messwertefaker aufbauen
willst. Daher würde ich damit anfangen, den zu entwerfen. Die ersten
paar Zeilen der Daten sind ja auch händisch schnell ergänzt und zum
Testen reicht das allemal.
Wenn dann feststeht, in welcher textuellen Form die Daten vorliegen
müssen, wird die Konvertierung in Angriff genommen.
C ist für derartige Zeichenkettenbasteleien überaus mindergeeignet.
Skriptsprachen wie python, ruby, perl und php sind dafür mit ihren
"höherentwickelten" Zeichenkettenverarbeitungsfunktionen wesentlich
besser geeignet. Für python gibt es sogar ein CSV-Parser-Modul. Damit
ist deine Aufgabe in nullkommanichts erledigt.
EDIT: Mir war' grad langweilig
1
import csv
2
data = csv.reader(open("data", "r"), delimiter=",")
Luk4s K. schrieb:> C ist für derartige Zeichenkettenbasteleien überaus mindergeeignet.> Skriptsprachen wie python, ruby, perl und php sind dafür mit ihren> "höherentwickelten" Zeichenkettenverarbeitungsfunktionen wesentlich> besser geeignet. Für python gibt es sogar ein CSV-Parser-Modul. Damit> ist deine Aufgabe in nullkommanichts erledigt.
Er muss es doch gar nicht parsen
convert.c
*********
1
#include<stdio.h>
2
3
intmain()
4
{
5
charline[256];
6
7
while(gets(line)){
8
printf("%s,\n",line);
9
}
10
}
fertig.
Command line öffnen
convert < data.dat > data_new.inc
und die Sache ist soweit erledigt, dass er das inc File in seinen
eigentlichen Code includen kann
1
.....
2
3
doubledata[]={
4
#include"data_new.inc"
5
};
6
7
...
Ich bezweifle nicht, dass man das in Ruby oder Perl genauso gut und
genauso schnell hinkriegt (und sicherer, weil man ja in C doch auf 256
char Zeilen, oder irgendeine andere Zahl, limitiert ist), aber so ein
simples Einmal-Tool sollte keinem C-Programmierer die Schweißperlen auf
die Stirn treiben.
Ansonsten soll er sich sein Lehrgeld zurückgeben lassen bzw. überhaupt
erst mal anfangen die C Grundlagen zu lernen. Das ist 1. Klasse, 5.
Lektion oder so. Gleich nachdem man den Begriff "String" kennen gelernt
hat.
Du kannst CSV Dateien auch mit Excel öffnen und dort Kommas anhängen
("Ausfüllen"), etc. Und dann alles markieren, kopieren, im Texteditor
einfügen. Der Anfang einer neuen Zelle wird dann durch einen Tabulator
ersetzt.
Luk4s K. schrieb:> Karl heinz Buchegger schrieb:>> Er muss es doch gar nicht parsen> Dann kann er ja auch die CSV-Datei direkt inkludieren?
In C nicht, weil ihm am Ende jeder Zeile ein ',' fehlt, der notwendig
wäre, damit er sein File als Initialisierung eines Arrays benutzen
könnte.
Und ich gestehe: Ich habe eine Annahme getroffen, die so nicht genannt
wurde.
Aus "XMega" und "Auswertung programmieren" habe ich auf C-Programmierung
geschossen. Dieser Schluss ist aber nicht zwingend.