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

Mehrere Dateien mit fopen einlesen

 

Manou_§
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 10.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2012, 00:10     Titel: Mehrere Dateien mit fopen einlesen
  Antworten mit Zitat      
Hallo zusammen,

ich möchte mit dem Befehl fopen mehrere dateien öffnen, bsp. durch eine for schleife und die 1. und 2. Spalte holen, die daten sind '.lvm' , nachträglich in mehrere Matizen reinlegen/abspeichern.
die Dateien sind so genannt:
test_1
test_2
...
test_10

und nun habe ich wie folgend den Code aufgebaut, es hat leider nicht funktioniert Confused .
Code:

for index=1:10

fid{index} = fopen('test {index}.lvm','r');
einlesen = textscan(fid{index},'%s%s%s%s%s');
einlesen = [einlesen{1}, einlesen{2}];       % einlesen nur 1. und 2. spalte        
......
M{index} = str2double(einlesen);              % in Matrix abspeichern
......        
fclose(fid);

end;

 


Ich brauche eure Hilfe die schleife im gang zu bringen Wink ,oder einen neuen Vorschlag die Daten auf einmal zu lesen, Danke.

Gruß,
Manuel
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 06.03.2012, 07:15     Titel:
  Antworten mit Zitat      
Code:


fid{index} = fopen(['test_' num2str(index) '.lvm'],'r');

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.03.2012, 12:28     Titel: Re: Mehrere Dateien mit fopen einlesen
  Antworten mit Zitat      
Hallo Manou_§,

Ein genereller Ratschlag:
"hat leider nicht funktioniert" ist keine gute Beschreibung des Problems. Es wäre besser, wenn Du erklärst, was passiert und was Du statt dessen erwartest.

Letzteres hast Du gemacht.
In "fopen('test {index}.lvm','r');" wird der Substring '{index}' einfach als String interpretiert. Ein Einsetzen des Wertes von [index] geschieht hier nicht. NUM2STR (siehe Winkows Antwort) oder SPRINTF helfen hier weiter.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Manou_§
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 10.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2012, 15:39     Titel:
  Antworten mit Zitat      
Hallo Jan,

Danke Winkow und Jan für eure hilfreiche Ratschläge, es hat gekllapt Smile .ich konnte die Daten von den test_files lesen.
du hast recht Jan, tatsächlich durch M{index} werden die Daten als cell interpretiert und nicht als arrays , jetzt habe ich ein weitere Problem, ich möchte nämlich die eingelesene werte bearbeiten, bsp. Kommas durch punkte ersetzen...

Code:


for index=1:10

fid{index} = fopen(['test_' num2str(index) '.lvm'],'r');
einlesen{index} = textscan(fid{index},'%s%s%s%s');  
einlesen{index} = [ein{index}(:,1), ein{index}(:,2)];            
                       
M{index} = strrep(ein{index}, ',', '.');      

       
fclose(fid{index});

end;

 


ich bekomme diese Error:

"Error using strrep
Cell elements must be character arrays."


was bedeutet das ?

daten{index} = str2double(M{index});
M{1,1}{1,1}


Danke,

Gruß,
Manuel
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.03.2012, 17:53     Titel:
  Antworten mit Zitat      
Hallo Manou_§,

Die Fehlermeldung ist eigentlich klar: Die Cell darf nur Strings enthalten, damit STRREP sie verarbeiten kann. Also enthält sie auch andere Werte.
Was ist den "ein" in Deinem Code?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Manou_§
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 10.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2012, 20:13     Titel:
  Antworten mit Zitat      
Hi Jan,

ok, das ich richtig, die cells erhalten auch werten die von den test_index eingelesen wurden, mit 'ein' ist nur einlesen gemeint, hier der Code und die 4 erste test dateien, versuche mal bei Dir , vielleicht klappt es, endlich soll die Matrix M aus der 1., und 2. Spalte von den jeweiligen test_1 bis test_4 bestehen Wink

Danke,

Code:

for index=1:4

fid{index} = fopen(['test_' num2str(index) '.lvm'],'r');
einlesen{index} = textscan(fid{index},'%s%s%s%s%s');  
einlesen{index} = [einlesen{index}(:,1), einlesen{index}(:,2)];            

??einlesen{index} = strrep(einlesen{index}, ',', '.');  
                             
fclose(fid{index});

end;

 % endlich sollen alle Spalten in einer Matrix ,

M=[einlesen{:}];  
 



Gruß,
Manou

test dateien.zip
 Beschreibung:

Download
 Dateiname:  test dateien.zip
 Dateigröße:  1.63 KB
 Heruntergeladen:  390 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.03.2012, 20:58     Titel:
  Antworten mit Zitat      
Hallo,

MATLAB ist sehr konsequent. Wenn ein Code auf einem Rechner nicht läuft, wird er auch auf einem anderen Rechner nicht laufen.

Das Problem hier:
einlesen{index} ist selbst noch ein Cell Array, das wiederum zwei Cell Arrays enthält; das kannst du im Workspace leicht überprüfen.

Du kannst dir das Leben deutlich einfacher machen, indem du die Dateien zunächst in Dateien mit Punkt als Dezimaltrennzeichen konvertierst und dann die Daten als Double einliest.

Grüße,
Harald
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.