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

Textscan anwenden

 

bage86
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 06.11.13
Wohnort: ---
Version: R2013a Student
     Beitrag Verfasst am: 27.01.2014, 13:08     Titel: Textscan anwenden
  Antworten mit Zitat      
Hallo

ich habe heute zum ersten mal versucht eine Datei mit textscan einzulesen und bin leider nicht zu dem gewünschten Ergebnis gekommen.

Die Daten liegen wie folgt vor:

13.74000 12.36000 -100.0000 1.38000 0.00000 NULL NULL
13.72000 12.35000 -100.0000 1.37000 0.00000 NULL NULL
13.72000 12.34000 -100.0000 1.38000 0.00000 14.1 116.2

TXTdatei mit tab getrennte Spalten.

ich möchte diese nun einlesen und anstelle der NULL-Werte eine 0 schreiben.

mein code:

Code:
fid=fopen('D:\Interschalt\BlueTracker\Vancouver 9k\Vancouver Wind.txt');
M=textscan(fid,'%f%f%f%f%f%f%f','Delimiter','\t');
fclose(fid);


Das Problem ist, dass immer nur die erste Zeile der Datei eingelesen wird und ich so eine 1x7 cell bekomme.

wie kann ich erreichen dass alle (Anzahl unbekannnt) Zeilen des Dokumentes eingelesen werden?

Und hat jmd eine Idee wie ich die Sache mit den NULL-werten lösen kann?

Gruß Bastian
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 27.01.2014, 13:20     Titel:
  Antworten mit Zitat      
Hallo

Bei TEXTSCAN gibt es folgende Optionen: TreatAsEmpty und EmptyValue, um NULL mit 0 zu ersetzen;
Außerdem kann man mehrere Delimiter angeben

Code:

data = sprintf('13.74000\t12.36000\t-100.0000\t1.38000\t0.00000\tNULL\tNULL\n13.72000\t12.35000\t-100.0000\t1.37000\t0.00000\tNULL\tNULL\n13.72000\t12.34000\t-100.0000\t1.38000\t0.00000\t14.1\t116.2')

M = textscan(data,'%f%f%f%f%f%f%f','Delimiter',{'\t','\n'},'TreatAsEmpty', 'NULL', 'EmptyValue',0)

M = [M{:}]

 
Private Nachricht senden Benutzer-Profile anzeigen
 
bage86
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 06.11.13
Wohnort: ---
Version: R2013a Student
     Beitrag Verfasst am: 27.01.2014, 13:31     Titel:
  Antworten mit Zitat      
Besten Dank !

genau das habe ich gesucht...

Gruß Bastian
Private Nachricht senden Benutzer-Profile anzeigen
 
bage86
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 06.11.13
Wohnort: ---
Version: R2013a Student
     Beitrag Verfasst am: 28.01.2014, 12:22     Titel:
  Antworten mit Zitat      
Ich habe noch mal eine Frage zur Weiterverarbeitung der Matrix.

Die Daten liegen jetzt als 78512x7 Matrix vor, hier ein Ausschnitt:

    12,7000000000000 13,2100000000000 5530 -0,500000000000000 12,1000000000000 14,8000000000000 328,600000000000
    12,7100000000000 13,2500000000000 5660 -0,540000000000000 12,6000000000000 0 0
    12,7000000000000 13,1400000000000 6080 -0,440000000000000 12,7000000000000 0 0
    12,7100000000000 13,1300000000000 6500 -0,410000000000000 13,2500000000000 13,5000000000000 325,300000000000
    12,7100000000000 13,2900000000000 6800 -0,570000000000000 13,4000000000000 0 0
    12,7100000000000 13,3000000000000 7460 -0,580000000000000 13,8100000000000 0 0
    12,6600000000000 13,2900000000000 7900 -0,620000000000000 13,9800000000000 14,4000000000000 311,600000000000


In der sechsten und siebten Spalte befinden sich jetzt die Nullwerte zwischen den Messwerten die ich habe. Ich möchte nun gerne in den jeweiligen Spalten die aufeinanderfolgenden zwei Nullen durch interpolierte Werte zwischen dem Vorgänger und dem Nachfolger ersetzen.
So dass also keine Nullen mehr vorhanden sind, sondern die Spalten quasi vervollständigt werden durch Interpolation. Wichtig ist dass wirklich jede Spalte für sich betrachtet wird da kein Zusammenhang zwischen den Spalten besteht.

Mit den klassischen Funktionen interp1 und interp2 bin ich nicht weitergekommen.

Jmd einen Ansatz für mich?
Private Nachricht senden Benutzer-Profile anzeigen
 
bage86
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 06.11.13
Wohnort: ---
Version: R2013a Student
     Beitrag Verfasst am: 29.01.2014, 15:25     Titel:
  Antworten mit Zitat      
So auch wenn ich hier gerade meinen eigenen Beitrag beantworte, hier mal meine Lösung Very Happy :

Code:
pa=1;
pb=2;
while (pa<length(M(:,6)))
 while (M(pb,6) == 0)
            pb=pb+1;
 end
   
        if((pb-pa)>1)
         M((pa+1):(pb-1),6) = mean(nonzeros(M(pa:pb,6)));
        end
   pa=pb;
   pb=pb+1;
    if (pb>length(M(:,6)))
    break
    end    
end

pc=1;
pd=2;
while (pc<length(M(:,7)))
 while (M(pd,7) == 0)
            pd=pd+1;
 end
   
        if((pd-pc)>1)
         M((pc+1):(pd-1),7) = mean(nonzeros(M(pc:pd,7)));
        end
   pc=pd;
   pd=pd+1;
    if (pd>length(M(:,7)))
    break
    end    
end  


Falls es mal jmd braucht, es funktioniert zwar, ist aber recht langsam und wie ich finde etwas umständlich. Wenn jmd einen Vorschlag zur Vereinfachung hat, sehr gerne Laughing Ansonsten erstmal-Danke fürs mitdenken.
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.