Forum: Mikrocontroller und Digitale Elektronik MatLab: Wie file lesen, das vershentlcih keine Zeilenumbrüche hat


von MatlabNoobi (Gast)


Lesenswert?

Servus zusammen,

ich size gerade mit etwas Adrenalin im Blut vor einer versauten Messung.
Ich habe leider im Logfile die Zeilenumbrücke vergessen. Jetzt stehen 
meine Daten alle in einer einzelnen Zeile.
So sieht das aus:
1
445375447  0  48  48  48  25,568  46,717  44,360  341,145  422,555  433,216  8,601  10,104  10,637  445405473  0  48  48  48  25,880  44,832  44,046  628,987 ...

Kann man da mit MatLab (damit muss ich die Daten weiter verarbeiten) 
irgendwie was draus machen, dass ich trotzdem die Daten nochmal lesen 
kann? muss doch gehn. Nur ich steh am schlauch und schiebe gerade auch 
etwas panik dass ich die 3 Stündige Messung wiederholen muss...

Aussehen hätte es so sollen
1
445375447  0  48  48  48  25,568  46,717  44,360  341,145  422,555  433,216  8,601  10,104  10,637
2
445405473  0  48  48  48  25,880  44,832  44,046  628,987  422,555  433,216  8,601  10,104  10,637
3
...

also 14 durch Tabs '\t' getrennte werte, dann ein Zeilenumbruch.
Jetzt stehen statt den Zeilenumbrüchen ebenfalls Tabulatoren.

Ist jemand da draußen der mit gerade einen Hinweis geben kann?

Bitte Bitte
grüße
Richard

von troll (Gast)


Lesenswert?

Kannst du das nicht schnell durch ein hingemurkstes Skript/Programm 
jagen was die Zeilenumbrüche einbaut? Mit etwas Perl oder sed/awk/keine 
Ahnung sollte das doch keine große Sache sein...

von mse2 (Gast)


Lesenswert?

MatlabNoobi schrieb:
> also 14 durch Tabs '\t' getrennte werte, dann ein Zeilenumbruch.
> Jetzt stehen statt den Zeilenumbrüchen ebenfalls Tabulatoren.

Ich bin sicher, dass es mit Matlab irgendwie geht, ich kann Dir nur 
nicht sagen, wie, weil ich mich damit nicht detailiert genug auskenne.
Wäre ich an Deiner Stelle, dann täte ich mir mit irgend einem 
Programmierwerkzeug, dass ich gut beherrsche, schnell ein Programm 
schreiben, dass Dein File liest, an den richtigen Stellen die 
Zeilenumbrüche einfügt und in ein entsprechend geändertes File schreibt.
Ich täte dazu entweder C/C++ oder Visual Basic nehmen, was gerade 
verfügbar und am einfachsten handhabbar ist.

von Simon S. (-schumi-)


Lesenswert?

Lade doch das File mal hier hoch. \n einfügen dürfte mit Python kein 
großes Problem sein..

von madeyemike (Gast)


Lesenswert?

Notepad++ und Regular Expression und die Sache ist erledigt

von asdf (Gast)


Lesenswert?

Lies es in Matlab ein und ändere die Dimension der Matrix mit reshape, 
damit kannst du aus deiner 1*n Matrix eine 14*m Matrix machen und 
speicher es dann wieder erneut ab..

http://www.mathworks.de/de/help/matlab/ref/reshape.html

von Simon S. (-schumi-)


Lesenswert?

Schnell gebastelt:
1
#!/usr/bin/python
2
3
dataold = open("dataold.txt", "r")
4
datanew = open("datanew.txt", "w")
5
6
werteprozeile = 14
7
8
for zeile in dataold:
9
        messwertliste = zeile.split()  # Daten nach Whitespaces (Leerzeichen, \t, \n usw) auftrennen
10
        wertezaehler = 0
11
        for messwerte in messwertliste:
12
                datanew.write(messwerte + "\t")
13
                wertezaehler = wertezaehler + 1
14
                if wertezaehler == werteprozeile:
15
                        datanew.write("\n")
16
                        wertezaehler = 0
17
18
19
20
dataold.close()
21
datanew.close()

Funktioniert zumindest mit deinem Beispiel:
1
simon@elementaryluna-usb:~/matlabnoobi$ cat dataold.txt 
2
445375447  0  48  48  48  25,568  46,717  44,360  341,145  422,555  433,216  8,601  10,104  10,637  445405473  0  48  48  48  25,880  44,832  44,046  628,987  422,555  433,216  8,601  10,104  10,637
3
simon@elementaryluna-usb:~/matlabnoobi$ ./matlabnoobi.py 
4
simon@elementaryluna-usb:~/matlabnoobi$ cat datanew.txt 
5
445375447  0  48  48  48  25,568  46,717  44,360  341,145  422,555  433,216  8,601  10,104  10,637  
6
445405473  0  48  48  48  25,880  44,832  44,046  628,987  422,555  433,216  8,601  10,104  10,637

von ex-student (Gast)


Lesenswert?

asdf schrieb:
> Lies es in Matlab ein und ändere die Dimension der Matrix mit reshape,
> damit kannst du aus deiner 1*n Matrix eine 14*m Matrix machen und
> speicher es dann wieder erneut ab..

yep! so würde ich's auch machen, wenn ich noch matlab hätte.

von J.-u. G. (juwe)


Lesenswert?

Mit Matlab-Hausmitteln geht das so:
1
function[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14] = LeseDatei(path)
2
3
fid = fopen(path);
4
5
C = textscan(fid, '%u\t%u\t%u\t%u\t%u\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t');
6
7
a1 = C{1};
8
a2 = C{2};
9
a3 = C{3};
10
a4 = C{4};
11
a5 = C{5};
12
a6 = C{6};
13
a7 = C{7};
14
a8 = C{8};
15
a9 = C{9};
16
a10 = C{10};
17
a11 = C{11};
18
a12 = C{12};
19
a13 = C{13};
20
a14 = C{14};
21
22
fclose(fid);

Aber: Matlab erwartet Punkte anstatt Kommas als Dezimaltrenner.
Hier:
http://compgroups.net/comp.soft-sys.matlab/data-import-2/885283
ist eine Matlabfunktion "comma2point" zu finden, die Du für die 
Konvertierung verwenden kannst.

von Praktiker (Gast)


Lesenswert?

MatlabNoobi schrieb:
> Nur ich steh am schlauch und schiebe gerade auch
> etwas panik dass ich die 3 Stündige Messung wiederholen muss...

Ich mach in solchen Fällen vorher ein paar Probemessungen. Die dauern 
nur ein paar Minuten und man sieht gleich, ob die erzeugten Daten zur 
Verarbeitungskette passen ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.