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

importdata -> wurde verändert in den neueren Versionen?!

 

Willa
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 80
Anmeldedatum: 23.05.08
Wohnort: Bremen
Version: Willa v1.0
     Beitrag Verfasst am: 23.05.2008, 17:31     Titel: importdata -> wurde verändert in den neueren Versionen?!
  Antworten mit Zitat      
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:

Code:
** Settings **

Clipping: 5
Averaging: 15X15

Treshold gray level: 180
Validation percentage: 5

Interrogation area: 59
Overlap percentage: 50

Peak finder method: Weighted

00  01  04  56  76  45  32  87  23  65  22  66
67  23  65  89  55  34  66  12  45  90  76  87
...
 


Ich möchte den ganzen "Kram" oben abschneiden und nur eine Tabelle mit den Zahlen unten haben. Dazu lese ich die Textdatei mit
Code:
A=importdata (fullfile(directory, filenames{k}),'\t');
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
Private Nachricht senden Benutzer-Profile anzeigen


nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 23.05.2008, 18:10     Titel:
  Antworten mit Zitat      
Hi,

ob bei
Code:
zwischen den Versionen was veränder wurde weiß ich nicht, müsste man in den sog. Release Notes nachsehen. Die gibts bei TheMathworks online.

Ich würde einfach vorher mal die Zeile mit dem 'weighted' suchen und dann ab dort einlesen:
Code:
clear all;
clc;

dateiname='test.txt';
fid=fopen(dateiname,'r');
hl=1;
while 1
    tline = fgetl(fid);
    hl=hl+1;
    if strfind(tline,'Weighted')
        break
    end
end
fclose(fid);
A = importdata(dateiname,'\t',hl);
daten=A.data


Vielleicht klappt das ja so.

Cool übrigens, dass Du auf Anhieb die Code-Formatierung benutzt hast! Cool
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Willa
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 80
Anmeldedatum: 23.05.08
Wohnort: Bremen
Version: Willa v1.0
     Beitrag Verfasst am: 23.05.2008, 18:32     Titel:
  Antworten mit Zitat      
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
        if strfind(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

swiftoutput.txt
 Beschreibung:
Swift Output

Download
 Dateiname:  swiftoutput.txt
 Dateigröße:  182.19 KB
 Heruntergeladen:  888 mal


Zuletzt bearbeitet von Willa am 21.08.2008, 11:18, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 23.05.2008, 21:11     Titel:
  Antworten mit Zitat      
So, hab mir die Datei mal angesehen, kommst Du so weiter?
Code:
clear all;
clc;

dateiname='swiftoutput.txt';
headerlines=16;
fid=fopen(dateiname);
daten=textscan(fid,'%d%4d:%4d%f%f%f%f%f%f%f%f%f%f%s%f%f%f%f%f%f%f%f%f%f','HeaderLines',headerlines,'Delimiter','\t','MultipleDelimsAsOne',1);
fclose(fid);

% die ersten 10 Versuchsnummern:
daten{1,1}(1:10)

%dazugerörige dx:
daten{1,4}(1:10)


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

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Willa
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 80
Anmeldedatum: 23.05.08
Wohnort: Bremen
Version: Willa v1.0
     Beitrag Verfasst am: 23.05.2008, 21:22     Titel:
  Antworten mit Zitat      
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);

for k=1:amount
    dateiname=fullfile(directory, filenames{k});
    fid=fopen(dateiname,'r');
    hl=1;
    while 1
        tline = fgetl(fid);
        if strfind(tline,'Pixel(')
            break
        end
        hl=hl+1;
    end
    fclose(fid);
    A = importdata(dateiname,'\t',hl);
    Acut=A;
end

Acut.textdata (1:hl,:)=[];
disp (['Removing rows 1 to ' num2str(hl) ' 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 % Function

Vielen Dank für die Hilfe!
William
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.