Verfasst am: 23.05.2008, 16:31
Titel: importdata -> wurde verändert in den neueren Versionen?!
Hi!
Ich habe hier ein ziemlich komisches Problem, auf das Google keine Lösung hat...:
Ich habe ein Script geschrieben bei der eine Textdatei eingelesen wird. Diese Textdatei sieht ungefähr so aus:
ein. Die Anzahl der Zeilen die mit dem "Kram" gefüllt sind ist leider bei jeder Textdatei unterschiedlich. Deswegen suche ich anschließend nch dem Wort "Weighted" und schneide das ganze hier ab.
Jetzt kommt mein kurioses Problem:
Auf meiner alten Matlab Version (R13) hat mein Script wunderbar funktioniert. Aber jetzt (7.6) wird auf einmal nicht mehr die ganze Textdatei eingelesen sondern nur die ersten 4 Zeilen (unter "Averaging 15x15" hört der cell Array einfach auf)!
Kann mir jemand erklären woran das bitte liegen kann? Hat Matlab irgendetwas verändert...? Weil ich habe nix verändert!
Wie kann ich die Datei sonst einlesen...?
Vielen Dank für eure Hilfe und viele Grüße,
William
Hey nschlange!
Danke erstmal für deine prompte Antwort. Das ist auf jeden Fall in der Richtung in der ich eine Lösung suche. Leider ist das Problem in Wahrheit noch etwas komplizierter...... In der Hoffnung auf eure Hilfe gebe ich jetzt mal so viele Infos wie überhaupt nur möglich:
Wie gesagt, die Textdatei soll auf die Zahlendaten reduziert werden. So sieht die Original Textdatei aus:
Die markierten Werte möchte ich in eine neue Matrix bekommen... Bisher hatte ich es so gelöst (das hatte wie gesagt bei der alten Version wunderbar funktioniert):
Code:
function[A]= swift2matrix( directory ) % wandelt den swift-output in eine matrize ohne klimbim um. % Spalten: x,y,u,v % öffnet ein ganzes verzeichnis mit textdateien:
direc = dir([directory,filesep,'*.','txt']);
direc = dir([directory,filesep,'*.','txt']); filenames={};
[filenames{1:length(direc),1}] = deal(direc.name);
filenames = sortrows(filenames);
amount = length(filenames);
for k=1:amount
A=importdata(fullfile(directory, filenames{k}),'\t');
Acut=A;
for j=1:20% search for the word 'pixel' in first column ifstrfind(A.textdata{j,1},'Pixel') > 0 break end end
Acut.textdata(1:j+1,:)=[]; % delete rows 1-i+1 disp(['Removing rows 1 to ' num2str(j+1) ' from dataset...']);
B=zeros(size(Acut.textdata,1),4); % prepare empty matrix same length as Acut, 4 columns
B(:,3)=str2num(strvcat(Acut.textdata(:,3))); % U vector
B(:,4)=str2num(strvcat(Acut.textdata(:,4))); % V vector
pixelpos=strvcat(Acut.textdata(:,2)); % pixels with ":" for i = 1:size(Acut.textdata,1);
B(i,1)= str2num([pixelpos(i,1) pixelpos(i,2) pixelpos(i,3) pixelpos(i,4)]); % xpos
B(i,2)= str2num([pixelpos(i,6) pixelpos(i,7) pixelpos(i,8) pixelpos(i,9)]); % ypos end; % i for % save files
savefile=[directory '\s2m_' filenames{k}] ;
save(savefile,'B','-ASCII','-double','-tabs');
end; % k for end% function
Aber das funktioniert eben nicht, weil ja die Textdatei nur total unvollständig eingelesen wird......
(In Wahrheit suche ich nach dem Wort "Pixel", in meinem ersten Post hatte ich versucht das ganze etwas zu vereinfachen....)
Ich hänge auch mal die Original Textdatei an falls mein Bild oben nicht ganz klar ist.
Ich arbeite erst seit 1 Monat mit Matlab und bin grad noch dabi mir das ganze bei zu bringen... Besonders diesen ganzen Textimport finde ich sehr unverständlich, auch wenn die Matlab Hilfe ansonsten wirklich brilliant ist...
Wenn mir jemand helfen könnte wäre das so schön!
Viele Grüße,
William
Das headerlines kannst Du ja wie oben geschrieben rausfinden. Dann liegen die Daten in einer cell..
Bis auf die Strings könntest Du die dann auch in eine Matrix packen.
_________________
Hi nschlange! Vielen Dank für deine Mühe! Das ist echt sehr freundlich von Dir. Ich habe in dieser Sekunde mit Hilfe deines ersten Posts eine Lösung gefunden. Anscheinend wurde Matlabs importdata Funktion um den Parameter "headerlines" erweitert. Diesen musste man früher nicht zwingend angeben. Jetzt aber anscheinend schon..... Das ist der Code der nun entstanden ist:
Code:
function[]= swift2matrix( directory ) % wandelt den swift-output in eine matrize ohne klimbim um. % Spalten: x,y,u,v
direc = dir([directory,filesep,'*.','txt']);
direc = dir([directory,filesep,'*.','txt']); filenames={};
[filenames{1:length(direc),1}] = deal(direc.name);
filenames = sortrows(filenames);
amount = length(filenames);
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
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.