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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.