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 mit textscan mit wechselndem Format in den Spalten

 

karst2222

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2010, 17:35     Titel: Einlesen mit textscan mit wechselndem Format in den Spalten
  Antworten mit Zitat      
Hallo,

ich muss eine Datei einlesen die in Spalten eigentlich Zahlen (numeric) aber teilweise auch " ++++ " bzw. "----" enthält. (Ursache ist wenn der Messwert über den Messbereich hinausgeht.)

Ich habe versucht mit textscan zu arbeiten dabei verschieden numerische Formate ausprobiert aber durch die plus "++++" und minus "----" bekomme ich überhaupt keine Daten in meine Strukt D (siehe Beispiel). Hierzu meine Frage ob es irgendeine Möglichkeit gibt bei textscan diese Sonderzeichen als NAN oder irgendwie anders werten zu können? Ich habe in der Hilfe nichts dazu gefunden.

Die zweite Variante die ich ausprobiert habe ist die Datei als String einzulesen, das funktioniert, und anschließend die "++++" bzw. "----" durch den Maximalwert der Spalte zu ersetzten. Hier stehe ich aber auf dem Schlauch wie ich erstens die Maximalwerte aus der "string" Struktur C bekomme und auf der anderen Seite wie ich sie anschließend in nummerische Daten umschreiben kann.

Vielen Dank für eure Hilfe. Anbei ein Auszug aus den Daten und die beiden Codes.

Code:
% Mit String funkioniert's
format = '%s %s %s %s %s %s %s %s %s';          

header = 'headerlines';
header_lines = 13;
fid = fopen(textscan_02);
while (~feof(fid)),  
  C =textscan(fid, format, header, header_lines);      
 
end;
fclose(fid);

% mit Flooting nicht
format = '%f %f %f %f %f %f %f %f %f';          

header = 'headerlines';
header_lines = 13;
fid = fopen(textscan_02);

while (~feof(fid)),
  D =textscan(fid, format, header, header_lines);      
 
end;
fclose(fid);  
[/b]

textscan_02.txt
 Beschreibung:
Daten

Download
 Dateiname:  textscan_02.txt
 Dateigröße:  6.04 KB
 Heruntergeladen:  617 mal


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 28.10.2010, 21:01     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Hierzu meine Frage ob es irgendeine Möglichkeit gibt bei textscan diese Sonderzeichen als NAN oder irgendwie anders werten zu können? Ich habe in der Hilfe nichts dazu gefunden.


... dann hasst du leider nicht genau gelesen. Auszug aus der Hilfe für die Option "TreatAsEmpty":
Zitat:

String(s) in the data file to treat as an empty value. Can be a single string or cell array of strings. Only applies to numeric fields.


Dies führt zu folgendem Code:
Code:

format = '%f %f %f %f %f %f %f %f %f';    

header = 'headerlines';
header_lines = 13;
fid = fopen('C:\Users\Lantis\Desktop\textscan_02.txt');
while (~feof(fid)),  
  C =textscan(fid, format, header, header_lines,'TreatAsEmpty',{'++++' '----'});      
end;
fclose(fid);
 

Anschließend kannst du nun die cell in eine Matrix umwandeln und die NaN's durch das Maxima der jeweiligen Spalte ersetzen:


Code:

MAT = cell2mat(C); % Convert cell to mat
for k = 1:size(MAT,2)
        MAT(isnan(MAT(:,k)),k) = max(MAT(:,k)); % replace NaN's with coloumn Maxima's
end
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Karst2222

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2010, 11:26     Titel:
  Antworten mit Zitat      
Hallo Sco,

du hast recht, das habe ich übersehen, bzw. falsch benutzt.

Vielen Dank für die Hilfe ich habe es eins zu eins umsetzten können.

Sorry für die späte Antwort, aber ich war letzte Woche auf einer Konferenz.

MfG
 
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.