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

hilfestellung beim auslesen einer textdatei

 

steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 07.02.2008, 12:31     Titel:
  Antworten mit Zitat      
Moin,
mit dem Befehl kann man auch mehrere Dateien auf einmal auswählen, deren Namen dann in einem Cell-Array gespeichert werden. Über eine Schleife kann man dann alle files abarbeiten lassen und zwischendurch noch Kaffee trinken gehen, da man das Programm ja nur einmal starten muss Wink
Code:
[filename pathname] = uigetfile(...,'multiselect','on'); % filename ist ein cell array und pathname ist ein string zu dem Ordner mit den files


Gruß
Alex

PS: Einen Ordner kann man per uigetdir() auswählen Wink
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen


noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2008, 13:26     Titel:
  Antworten mit Zitat      
ich möchte jedes m-file in einer scheife abarbeiten bis jetzt haben wir das so gelöst
Code:
clear all;
clc;
%
%[filename pathname] = uigetfile('*.m','multiselect','on');
%filename ist ein cell array und pathname ist ein string zu dem Ordner mit den files
files=dir('*.m');
for i=1:length(files) ;
load(files(i).name,'-ascii');
[pfad, name, ext, vers]=fileparts(files(i).name);
%Auswertung
eval(['temp=',name]);
x=temp(:,1);
y=temp(:,2);
t = 0:0.1:2*pi;
x_ = mean(x) ;
y_ = mean(y) ;
r = 0.3;
%
Innen=length(find((x-x_).^2+(y-y_).^2<=r.^2));
Anteil_Innen=Innen/length(x)*100;
%
plot(x_,y_,'rx','LineWidth',4);
axis equal
axis([min(x)-0.2 max(x)+0.2 min(y)-0.2 max(y)+0.2]);
hold on
plot(x_+r*cos(t),y_+r*sin(t),'r','LineWidth',3)
plot(x,y);
leg = ['Inner Loop: ' num2str(Anteil_Innen) ' Prozent'];
legend(leg,'Location','SouthOutside')
hold off
xlabel('COFx')
ylabel('COFy')
title(name)
grid on
%
path = strcat(pwd,filesep,'2d',filesep);
mkdir(path);
print('-djpeg',[path name]);
%X=temp(:,1)*temp(:,2)';
%save([name,'.txt'],'X','-ascii');
end
 


damit das funktioniert hat, mussten wir bis jetzt immer den current directory auf den jeweiligen ordner festlegen.

mit dem uigetfile kann man ja nur immer die m-files auswählen und nicht nur den ordner wo alle drinnen stehen.
was müssten wir da ändern?

danke für die bemühungen
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 07.02.2008, 13:42     Titel:
  Antworten mit Zitat      
Na wie ich oben schon schrieb, mit uigetdir() Wink
Code:
clear all;
clc;
%
% [filename pathname] = uigetfile('*.m','multiselect','on');
% filename ist ein cell array und pathname ist ein string zu dem Ordner mit den files
pathname = uigetdir;
files = dir(fullfile(pathname, filesep, '*.m'));
% [...]

Damit solltet ihr das Verzeichnis auswählen können und danach werden die Namen aller m-files aus diesem Verzeichnis eingelesen.

Ganz unten in eurem Code müsst ihr dann nur aufpassen, dass ihr jetzt nicht das current directory gewechselt habt.
Code:
path = strcat(pathname,filesep,'2d',filesep); % hier steht jetzt statt pwd pathname, da das ja jetzt der Ordner ist, "in" welchem ihr arbeitet
mkdir(path);


Ich hoffe ich habe jetzt nix übersehen in eurem Code Rolling Eyes
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2008, 13:58     Titel:
  Antworten mit Zitat      
es kommt folgende fehlermeldung, wenn wir das durchführen was du gepostet hast:

??? Error using ==> load
Unable to read file SOT_100_4_1_oheimisi.m: No such file or directory.

Error in ==> plot_2d at 10
load(files(i).name,'-ascii');

hast du vorschläge
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 07.02.2008, 15:02     Titel:
  Antworten mit Zitat      
Ahhh, ich wusste doch ich hab was übersehen Sad
Der load-Befehl sucht ja im current directory nach der Datei - also müsst ihr den Aufruf noch etwas verändern:
Code:
load([pathname filesep files(i).name],'-ascii');

So sollte es aber jetzt laufen - hoffe ich Wink
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2008, 11:44     Titel:
  Antworten mit Zitat      
hi

jetzt funktionert das super

jedoch gibts jetzt ein problem mit einer anderen "Funktion".
dadurch dass wir jetzt den current directory nicht mehr auswählen, funktioniert die zeile, dass er ein txt.file in den orner speichen soll nicht mehr

Code:

save([name,'_spek.txt'], 'ppower', '-ascii');
 


die logische schlussfolgerung wäre, einfach ein path oder so vor name zu schreiben aber damit hatten wir keinen erfolg

könnt ihr uns bitte weiterhelfen

danke und schönes wochenende

noobs
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 08.02.2008, 13:25     Titel:
  Antworten mit Zitat      
Normalerweise sollte folgendes funktionieren (wenn ihr die Datei in dem Ordner abspeichern wollt, aus dem ihr die andere eingelesen habt):
Code:
save([pathname,name,'_spek.txt'], 'ppower', '-ascii');


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2008, 13:42     Titel:
  Antworten mit Zitat      
hi

das klappt noch ich.

der ordner, aus dem die funtktion aufgrerufen wird ist im ..\work\xxx

aber die ganzen txt-files werden in ..\work reingespeichert.

kann man den pfad irgendwo "genauer eingeben"

lg noob
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 08.02.2008, 13:52     Titel:
  Antworten mit Zitat      
Hmm, ich verstehe euch nicht richtig glaub ich...
Aus welchem Ordner lest ihr denn die files ein? Aus ...\work\xxx oder aus ...\work?
Im 2. Fall müsste dann folgendes stehen:
Code:
save([pathname,'xxx',name,'_spek.txt'], 'ppower', '-ascii');


Ansonsten schreibt nochmal genauer, was ihr von wo einlest und was ihr wohin speichern wollt Wink
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2008, 14:10     Titel:
  Antworten mit Zitat      
hi

danke für die mühen

aus irgendeinem grund funktionierts jetzt so wie schon am anfang ausprobiert

mit:
Code:
save([path, name,'_spek.txt'], 'ppower', '-ascii');


lg
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2008, 10:42     Titel:
  Antworten mit Zitat      
Eine Sache gibt es noch die wir bei unserem anderen code abändern müssen. Grundsätzlich sind wir davon ausgegangen, dass wir nur wenige txt-files einlesen müssen, und einzeln aufrufen (mittels uigetfile).. jetzt sind es über 50 und daher würden wir es gerne in der gleichen art machen wie beim gerade besprochenen fall (mit uigetdir?). Der code soll also für alle, im ordner gespeicherten txt-files ausgeführt werden.

der code: (es ging dabei darum, aus einem txt file in dem 144 datensätze stehen, 144 einzelne m-files zu machen die wir später weiter verarbeiten)http://www.gomatlab.de/viewtopic,p,2018.html#2018
Code:

[filename, pathname]=uigetfile ('*.txt', 'Select input data file:');
fid = fopen([pathname filename])
mkdir([pathname filename(1:end-4)]);
% Main-Header überspringen (14 Zeilen)
for i=1:14;
fgetl(fid);
end
%
try
n = 0;
while 1
%
n = n+1
% Type auslesen
test_type = sscanf(fgetl(fid),'Test Type: %s');
fgetl(fid);fgetl(fid);fgetl(fid);fgetl(fid);
cond_num = sscanf(fgetl(fid),'Condition Number: %s');
trial_num = sscanf(fgetl(fid),'Trial Number: %s');
fgetl(fid);fgetl(fid);fgetl(fid);fgetl(fid);
%
tmp = fgetl(fid);
test_comm = strread(tmp,'%s');
%
test_comm = test_comm(3:end);
% '/' backslash eliminieren
test_comm(ismember(test_comm,'/'))=[];
%
% nur die erstn 2 Chars von jedem Keyword extrahieren
test_comm1 = [];
for i=test_comm'
test_comm1 = [test_comm1 i{1}(1:2)];
end% for
%
% filenamen bilden
if (test_comm1>0)
fname = sprintf('%s_%d_%s_%s_%s.m', ...
test_type,n,cond_num,trial_num,test_comm1);
else
fname = sprintf('%s_%d_%s_%s.m', ...
test_type,n,cond_num,trial_num);
end
%file anlegen
fid1 = fopen([[pathname filename(1:end-4) filesep], fname],'wt');
%
%
% startet bei Zeile: Test Comment
%
%überspringt die nächsten 2 Zeilen (" " und "Units...")
for i=1:3 ;
fgetl(fid);
end
%
%speichert Zeile DP LF .... bis Zeile 20 -> (Units)
%
flag = 0; % Hinweiszeichen, ob es sich um einen verkürzten Eintrag handelt
%
for i = 1 : 2000
zeile = strread(fgetl(fid),'%s','delimiter',' '); % wenn ihr die Spalten durch Tabs getrennt habt, ansonsten ' ' für Leerzeichen
% zeile ist nun ein Cell-Array (mit in eurem Fall 10 Einträgen)
%
if isempty(zeile) % Wenn die eingelesene Zeile leer ist (also keine Strings enthält), soll die For-Schleife abgebrochen werden, da das Einlesen der Messdaten beendet ist.
flag = 1; % Hinweis für verkürzten Eintrag auf "1" also "wahr" setzen.
break
end
%
zeile = [zeile{7} ' ' zeile{8}]; % hier wird nun ein String definiert, der nur die Werte der 1., 3. und 7. Spalte enthält
fprintf(fid1, '%s \n', zeile);
end
%
%
%
% angelegten File schliessen
fclose(fid1);
%
% Zeilen überspringen bis nächster Header -> Test Type
if ~flag % Für flag = 0 (und damit ~flag "wahr") wird eine Zeile eingelesen. Wenn flag = 1 ist (und damit ~flag "falsch"), wird keine weitere Zeile eingelesen, weil die Leerzeile ja schon in der For-Schleife eingelesen wurde.
fgetl(fid);
end
end% while
end% try
%
fclose(fid);
 


wir haben schon versucht, den code so umzuschreiben wie beim anderen (mit uigetdir), bis jetzt aber leider ohne erfolg...
multiselect wäre auch eine möglichkeit, mit:
Code:

[filename, pathname]=uigetfile('*.txt', 'multiselect','on');
 

können wir zwar mehrere files auswählen, wissen aber nicht wie wir den restliche code anpassen müssen



danke schonmal, für jede art von hilfestellung!!
Private Nachricht senden Benutzer-Profile anzeigen
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 11.02.2008, 11:54     Titel:
  Antworten mit Zitat      
Die erste Anpassung wäre, dass "filename" nun kein String mehr ist, sondern ein Cell Array, in dem Strings stehen.

Ihr müsstet also euren ganzen Code (bis auf das Auswählen der Dateien) in eine For-Schleife packen:

Code:

% Auswahl der Dateien mit uigetfile
for f = 1 : length(filename)

% Hier den normalen Code einfügen
% Vorsicht: überall, wo "filename" steht, muss jetzt "filename{i}" stehen

end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2008, 12:51     Titel:
  Antworten mit Zitat      
cool, danke das funktioniert jetzt einwandfrei..

kann man das multiselecten auch auf ordner anwenden, weil jetzt haben wir ja 50 ordner die weiterverarbeitet werden müssen...

Tut uns leid, dass wir dauert nachfragen müssen, aber irgendwie reicht unserer forstellungsgabe bis lang nicht aus um selber drauf zu kommen...

Code:

clear all;
clc;

pathname = uigetdir;
files = dir(fullfile(pathname, filesep, '*.m'));
%
for i=1:length(files) ;
load([pathname filesep files(i).name],'-ascii');
[pfad, name, ext, vers]=fileparts(files(i).name);
%Auswertung
eval(['temp=',name]);
x=temp;
n=length(x);
y=fft(x,n);
y(1)=[];
lele=length(y) ;
%power=abs(y(1:lele/40)).^2              
le=(1:lele/66.6);
power=abs(y(le));
%
psum =sum(power);
%
ppower= (power)./psum;
%
%ppower= (log10((power)./psum)).*10
%
%
frq=(le)/20;
%
%
stem(frq,ppower)                  
%
%
grid on
xlabel('f [Hz]')
ylabel('Power [%]')
title(name)
%
path = strcat(pathname,filesep,'fft',filesep);
mkdir(path);
print('-djpeg',[path name])
save([path, name,'_spek.txt'], 'ppower', '-ascii');
save([path, name,'_freq.txt'], 'frq', '-ascii');
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 11.02.2008, 13:22     Titel:
  Antworten mit Zitat      
Mir ist es bisher leider nicht gelungen, ein Multiselect in mehreren Ordnern umzusetzen, allerdings habe ich auch nicht viel Recherche betrieben, weil ich es für meine Zwecke nicht brauche (alle Dateien im selben Ordner).
Private Nachricht senden Benutzer-Profile anzeigen
 
clem35
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 23.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2008, 13:50     Titel:
  Antworten mit Zitat      
hi leute

ich suche auch schon seit längerem nach so einem "Befehl", mit dem ich mehrere ordner gleichzeitig ausführen kann.

bin bis jetzt auch noch nicht wirklich schlauer geworden darüber.

es wäre echt toll, wenn da wer eine vernüftige idee hätte, wie man sowas lösen könnte.

im google, hab ich zu diesem thema gar nix gfunden.

bin schon fast am verzweifeln
lg clemi
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3  Weiter

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.