MatLab: Wie file lesen, das vershentlcih keine Zeilenumbrüche hat

Gast #3029899
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
Gast #3029910
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.
#3030003
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
#3030064
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.
Gast #3030075
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 ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren