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

Einlesen einer .txt Datei mit Buchstaben und Zahlen (argh!)

 

Cayennepfeffer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.01.2013, 10:36     Titel: Einlesen einer .txt Datei mit Buchstaben und Zahlen (argh!)
  Antworten mit Zitat      
Hallo,

ich stehe wie der Ochs vorm Berg vor dieser Datei. Es geht um eine riesige .txt Datei mit Messwerten, die ich nicht aufgenommen habe aber auswerten soll.

Sie hat (denke ich) 209 Spalten, es gibt 4 Reihen Header (Messgerät, Messgröße, Einheit und etwas, dass mit Spot bezeichnet ist). In diesen 4 Reihen sind nur Buchstaben.

Dann kommen die Messwerte. Zum einen gibt es darin viele Lücken, zum anderen Buchstaben, dann Angaben wie '??°???' oder 'error' oder 'nan'. Natürlich nicht immer an denselben Stellen...

Getrennt werden die Angaben durch tab.

Habt ihr irgendeine Idee, wie ich daran gehen könnte? Oder wie ich die Datei bearbeiten könnte, damit Matlab weniger Schwierigkeiten damit hat? Sollte ich zum Beispiel die '°' durch z.B. die Zahl Null ersetzen?

Vielen Dank schonmal,
Cayennepfeffer


markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 22.01.2013, 10:56     Titel: Re: Einlesen einer .txt Datei mit Buchstaben und Zahlen (arg
  Antworten mit Zitat      
Klingt nach einer spaßigen Aufgabe für textscan.

Cayennepfeffer hat Folgendes geschrieben:

ich stehe wie der Ochs vorm Berg vor dieser Datei. Es geht um eine riesige .txt Datei mit Messwerten, die ich nicht aufgenommen habe aber auswerten soll.
Sie hat (denke ich) 209 Spalten, es gibt 4 Reihen Header (Messgerät, Messgröße, Einheit und etwas, dass mit Spot bezeichnet ist). In diesen 4 Reihen sind nur Buchstaben.


Was für einen Separator wird im Header verwendet? Komma, Semikolon? Oder auch Tab?

Einfach mal zählen mit

Code:

fid = fopen('filename.txt','r');
fline = fgetl(fid);
fclose(fid);
s = sum(fline == ';'); % Bei einem Semikolon Separator
 


Ggf musst du die Zahl noch um +/-1 addiert/subtrahiert werden, je nach dem, ob am Ende der Zeile der Separator nochmal auftaucht oder nicht. Dann weißt du schonmal mit wie vielen Spalten du es zu tun hast.

Cayennepfeffer hat Folgendes geschrieben:

Dann kommen die Messwerte. Zum einen gibt es darin viele Lücken, zum anderen Buchstaben, dann Angaben wie '??°???' oder 'error' oder 'nan'. Natürlich nicht immer an denselben Stellen...


Wenn du in jeder Zeile,Spalte eine Non Numeric expression haben kannst, bleibt dir imho nix anderes übrig, als alles erst mal als %s String einzulesen (Wüßte zumindest nicht wie sonst).
Wenn du den Separator gezählt hast, kannst du mit hilfe dieser Anzahl dir die textscan Zeile mithilfe von repmat füllen lassen

Code:

%Wieder fid fopen
r_rows =  sprintf('%s' ,repmat('%s ',1,s));
data = textscan(fid, r_rows, 'Delimiter', ';'); %Separator wieder anpassen, hier wieder Semikolon als Beispiel
 


Cayennepfeffer hat Folgendes geschrieben:

Sollte ich zum Beispiel die '°' durch z.B. die Zahl Null ersetzen?

Wenn es denn wirklich eine Null sein soll? Kannst du dann aber eh in Matlab machen.
Wenn du die Datei dann eingelesen hast, musst du den Inhalt von data durchgehen und gucken ob dort Zahlen drin sind, oder nicht (strfind, strcmp, regexp...)
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Cayennepfeffer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.01.2013, 11:45     Titel:
  Antworten mit Zitat      
Vielen Dank schonmal.

So:

fid = fopen('basic2.txt','r');
fline = fgetl(fid);
fclose(fid);
s = sum(fline == 't');

fid=fopen('basic2.txt')
r_rows = sprintf('%s' ,repmat('%s ',1,s));
data = textscan(fid, r_rows, 'Delimiter', 't', 'bufsize', 8190);

bekomme ich schon mal keine Fehlermeldung. Leider werden ein paar Reihen noch falsch zugeordnet. Vielleicht sollte ich erst mal den Code richtig verstehen (vielleicht sollte ich hier dazusagen, dass ich bestimmt kein matlab-Profi bin).

Was genau macht repmat? Womit werden die Lücken da aufgefüllt? Und was bedeutet dann r_rows als Angabe in textscan?
 
markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 22.01.2013, 12:03     Titel:
  Antworten mit Zitat      
Cayennepfeffer hat Folgendes geschrieben:


Was genau macht repmat? Womit werden die Lücken da aufgefüllt? Und was bedeutet dann r_rows als Angabe in textscan?


repmat wiederholt die deine Angabe.

r_rows hast du vorher selber definiert Wink Einfach mal try und error ab und an das Semikolon weg lassen, wenn man nicht wirklich weiß was dort passiert.

Code:

>> s=5

s =

     5

>> sprintf('%s' ,repmat('%s ',1,s)) %r_row

ans =

%s %s %s %s %s


Diese %s werden dann in dein textscan Teil gepackt, damit du nicht 219 mal %s schreiben musst.

Achja, du kannst in dein textscan befehl noch 'HeaderLines', 4 reinbauen, damit er die Headlines direkt überspringt.

Code:

textscan(fid, r_rows, 'Delimiter', 't', 'bufsize', 8190, 'HeaderLines', 4);
 

_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
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 - 2024 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.