WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Spaltenweise auslesen von *.log Dateien

 

matlabschnitzel
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 28.09.11
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 28.09.2011, 15:00     Titel: Spaltenweise auslesen von *.log Dateien
  Antworten mit Zitat      
Hey Leute,
ich habe schon einige Beiträge durchsucht aber letztenendes keine Lösung für mein Problem gefunden.
Ich bin ein Anfänger was MatLab betrifft und vielleicht ist mein Problem für euch ja trival lösbar.

Problem:
Ich habe eine *.log Datei in der sehr viele Messwerte abgelegt sind und möchte diese einlesen.
z.B. sieht die log Datei so aus:
Code:

%//header
%//bla bla
%//endeHeader
text1   text2   ...... textn/2 .... textn
  1          5                B             7
  2          4                B             0

usw.

data = load('logdatei');

funktioniert nicht, da hier in Spalte "textn/2" Buchstaben stehen.

Jetzt würde es ja die Möglichkeit geben "fopen" zu verwenden und dann mit "textscan" weiter zu machen, nur werden hierbei die Daten Zeilenweise rausgeschrieben. Ich hätte es aber gerne Spaltenweise ausgelesen.

Gibt es eine elegante Lösung hierfür? Und was noch besser wäre: nur bestimmte Spalten auszulesen. z.B. "text2" und "textn".

Grüße
der MatLab-Neuling
Private Nachricht senden Benutzer-Profile anzeigen


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 29.09.2011, 17:35     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Jetzt würde es ja die Möglichkeit geben "fopen" zu verwenden und dann mit "textscan" weiter zu machen, nur werden hierbei die Daten Zeilenweise rausgeschrieben. Ich hätte es aber gerne Spaltenweise ausgelesen.

Es wird zwar zeilenweise ausgelesen, aber die Ergebnisse werden doch spaltenweise abgespeichert (in einer Cell). Das sollte dann doch so sein wie du moechtest? Um bestimmte Spalten wegzulassen musst du ein * vor den Datentyp setzen (siehe Hilfe von textscan).
Hier mal ein Beispiel (mit 2 Moeglichkeiten) fuer dein gepostetes File:
Code:

fid = fopen('Pfad\test.txt','r');
data = textscan(fid, '%*f %f %*s %f',' HeaderLines', 4);
fclose(fid);
mat = cell2mat(data); % wenn keine Buchstaben ausgelesen werden

% oder eben die Spalten gleich als einzelne Variablen abspeichern
[A B] = textread('Pfad\test.txt', '%*f %f %*s %f', 'headerlines', 4);
 


Du muesstest natuerlich noch die Anzahl der Header Lines auf dein richtiges File anpassen.

Wenn doch noch Fragen verbleiben sollten, dann frag Smile.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabschnitzel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 28.09.11
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 30.09.2011, 15:10     Titel:
  Antworten mit Zitat      
Vielen Dank für die Hilfe.
Für meinen Fall werde ich deine Variante 1 verwenden. Smile

Was mich jetzt noch brennend interessiert ist:
Muss man diese Spaltendefinitionen
Code:
'%*f %f %*s %f','

immer komplett angeben? Hier in dem kleinen Beispiel ist es ja überschaubar aber ich hab teilweise log Dateien mit über 120 Spalten.
Ist es dann gut eine Schleife zu machen die mir die Stringkette erzeugt?
Oder gibt es irgendeine elegantere Lösung.
Weil 95 mal %f schreiben (copy paste geht natürlich auch Very Happy ) , einmal %*s und dann wieder x mal %f ist schon lässtig. Sad

Grüße und ein schönes WE
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 30.09.2011, 19:49     Titel:
  Antworten mit Zitat      
Hallo,

fuer deine Variante koenntest du z.B. sowas machen (50 Spalten)
Code:

 idx = ones(1,50); % 1 = %f
 idx([3 4 5 10 20 33 49]) = 2; % 2 = %*s
 idx = num2str(idx); % Umwandlung in einen String

 string = regexprep(idx, '1', '%f'); % Ersetze "1" durch %f
 string = regexprep(string, '2', '%*s'); % Ersetze "2" durch %*s
 


Die Spalten 3,4,5,10,20,33 und 49 sind vom Typ %*s der Rest %f.

MFG

Marko
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabschnitzel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 28.09.11
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 02.10.2011, 19:31     Titel:
  Antworten mit Zitat      
Hey,
das ist eine wirklich gute Idee.
Vielen Dank für die Hilfe.
Jetzt kann ich wieder ruhiger schlafen. (=

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.