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

daten aus textdateien extrahieren?!?!

 

marcel

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2007, 15:50     Titel: daten aus textdateien extrahieren?!?!
  Antworten mit Zitat      
Hallo zusammen interessantes Thema hät ich da.
Habt ihr mal versucht aus einem Txt. File in dem neben werten auch text steht zahlen zu extrahieren?

Ich habe das Problem und viell eine Lösung die beliebig schlecht funktioniert.

Soweit hab ich es:
Code:
fid = fopen([num2str(1),'.txt'],'r');

%Sucht begriff Channel2
suchbegriff = 'CHANNEL: 2';
for i = 1:10000
    A = fscanf(fid,'%s',1);
    if strcmp(suchbegriff,A) ==1, break, end
end

%Sucht begriff Imag"
suchbegriff ='Imag"';
for i = 1:10000
    A = fscanf(fid,'%s',1);
    if strcmp(suchbegriff,A) ==1, break, end
end

% Holt sich den ersten Wert (Frequenz)
a = fscanf(fid,'%e',1)


wobei der File die Form hat:
Code:
"CHANNEL: 2"
"MEASURE TYPE: S21"
"FORMAT TYPE: LOG MAG"
"NUMBER of POINTS: 801"
"SWEEP TIME:  280 ms"
"SWEEP TYPE: LOG FREQ"
"SOURCE POWER:  0 dBm"
"IF BANDWIDTH:  40 kHz"

"Frequency"   "Data Trace Real"   "Data Trace Imag"1
2.000000000000E+05   -1.726058E+01   0.000000E+00
2.019981140000E+05   -1.555413E+01   0.000000E+00
....

ich würde nun gerne die 2 Spalte einlesen und zwar automatisch, da es über 800 Werte sind und es bis jetzt 18 Files sind. Und das wohl auch öfter nötig sein wird.

Ne Idee?

Danke für euer Intresse und Anregungen.

Gruß

Marcel

EDIT: Code-Formatierung eingefügt!


Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 22.09.2007, 19:53     Titel:
  Antworten mit Zitat      
Hallo Marcel,

Vorab eine Frage: sind die Dateien immer gleich formatiert? Also hast Du immer zehn Zeilen Header und danach immer drei Spalten Daten? Dann könnte Dir der Befehl dlmread weiterhelfen

Code:

data = dlmread(meinfile,' ',9,1)
 


Dlmread liest alle Daten ab einer bestimmten Zeile ein (alles darüber wird ignoriert) und ab einer bestimmten Spalte. Der zweite Parameter im Funktionsaufruf ist das Trennzeichen, also entweder Leerzeichen ' ' oder Tabulator '\t'.

Wenn die Dateien immer unterschiedliche viele Headerzeilen oder Spalten haben,
kann ich Dir eine Lösung anbieten, die zwar funktioniert, aber leider nicht sehr schnell ist.
Allerdings ist es leider so, dass ich den code nur im Büro haben und nicht auswendig komplett hinbekomme (habe daheim leider kein matlab). Ich könnte bei Interesse Montag ein Beispiel posten. Meine Lösung sieht so aus:

Mit dem Befehl textread wird die Datei in ein cell-array eingelesen, jede Zeile ist ein String-Array. Dann wird mittels cellfun nach der Kopfzeile gesucht (in diesem Fall "Frequency" "Data Trace Real" "Data Trace Imag"1)

und dann mittels strfind die Nummer der gewünschten Spalten herausgesucht. Hat man die Nummer der Spalte nach der Überschrift bestimmt und die Kopfzeile, kann man nun alle folgenden Zeilen einlesen und jeweils den zweiten/dritten/etc Wert in ein Array kopieren.

Das ergibt also eine FUnktion, der man Dateiname(n) und Spaltennamen übergibt, und die die Daten in den entsprechenden Spalten zurückliefert.
Interesse? Dann schaue ich, dass ich MOntag den Code mitbringe. Gerade mit cellfun komme ich immer durcheinander ...

Der Nachteil an der Verwendung von textread ist allerdings, dass Matlab bei der Verarbeitung von cell-arrays etwas langsamer zu sein scheint als wenn man die Einleseroutine gleich mit fscanf schreibt (wie Du bereits angefangen hast) - Bei der Verwendung von fscanf werden ja auch nur die benötigten Daten in den Speicher kopiert.
_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
Private Nachricht senden Benutzer-Profile anzeigen
 
Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 25.09.2007, 04:23     Titel:
  Antworten mit Zitat      
Hallo,

hier noch der Codeschnipsel zum Suchen in cell-arrays, falls Du Dich für textread entscheidest

Code:

 zeile = find(cellfun('isempty', strfind(CArray,'Data Trace Imag')) == 0);
 


in zeile stehen die Zeilen des Cell-arrays CArray, die 'Data Trace Imag' enhalten. Damit kannst Du (bei variablen Formaten) die jeweilige Zeile bestimmen, ab der Daten geschrieben sind.
_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
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.