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

Problem: invalid file identifier

 

Psycho_Inc.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.07.2009, 19:22     Titel: Problem: invalid file identifier
  Antworten mit Zitat      
Hallo,
Für meine BSc-arbeit muss ich mittels Matlab Plots erstellen.
Dazu müssen Daten aus Dateien eingelesen werden, die ich zuvor angelegt habe. Jetzt habe ich allerdings schon ein Problem beim Einlesen:
Code:
function stormplot_piu





PIU_val=[];       %row vector
   
fid=fopen('L:\BACHELOR THESIS\data\Ground\piu\PIUstorm_1.dat');

if(fid ~= -1)
   
while 1
line = fgetl(fid);  %get the lines  
     
    if(line == -1), break
    end %if there's no data
         
     
         for i = 1:60  %60 values (every minute)    
       
                    io = (34 + i*5 + i - 1);            
                    in = io-4;
                   
                end%<<if>>
                     
                 if (i == 1)  %first value
             
                    io = (34 + i*5);
                    in = io-4;                                
                     
                elseif (i > 1)  %after first value, the spaces come up
           
                values(i) = eval(line(in:io)); %only the values without preceding test
                 
            end%<<for>>
       
         
         PIU_val = [PIU_val ; values]; %put values in a row vector declared at the beginning
         fclose(fid); %close file
     
       
end
else
        fprintf('file ended')
end

Wenn ich das durchlaufen lasse bekomme ich immer den Fehler:

??? Error using ==> fgetl
Invalid file identifier.

Error in ==> L:\BACHELOR THESIS\data\Ground\piu\stormplot_piu.m
On line 14 ==> line = fgetl(fid); %get the lines

Was mach ich falsch??


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 06.07.2009, 19:37     Titel:
  Antworten mit Zitat      
Moin,

versuch mal von der C-Struktur Abstand zu nehmen Wink

Schau dir die Funktion IMPORTDATA an bzw. such mal hier im Forum nach "Datei einlesen", da findest du schon ne Menge.

Weiterer Tipp: Im Current Directory Rechtsklick auf die Datei und "Import Data" wählen. Am Ende auf "generate m-File" klicken und schon hast du eine fertige Funktion, die jede Datei genauso behandelt wie du die eine behandelt hast Wink

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
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 06.07.2009, 19:54     Titel:
  Antworten mit Zitat      
Hallo
weil du nach der FOR-Schleife oder IF Bedinung (prüfe bitte hier, weil Kommentare an ENDs nicht stimmen) machst du gleich den FILE wieder zu
Code:

 fclose(fid); %close file
 


und dann natürlich bricht es bei zweiten Durchlauf mit Fehlermeldung ab. Deswegen FCLOSE aus WEIL-Schleife auslagern

Code:

function stormplot_piu





PIU_val=[];       %row vector

fid=fopen('L:\BACHELOR THESIS\data\Ground\piu\PIUstorm_1.dat');

if(fid ~= -1)
   
   while 1
      line = fgetl(fid);  %get the lines
     
      if(line == -1), break
      end %if there's no data
     
     
      for i = 1:60  %60 values (every minute)
         
         io = (34 + i*5 + i - 1);
         in = io-4;
   %%% Welches IF ????      
      end %<<if>>
     
      if (i == 1)  %first value
         
         io = (34 + i*5);
         in = io-4;
         
      elseif (i > 1)  %after first value, the spaces come up
         
         values(i) = eval(line(in:io)); %only the values without preceding test
     
%%%%%% BIST sicher dass FOR hier endet ???  
      end %<<for>>
     
     
      PIU_val = [PIU_val ; values]; %put values in a row vector declared at the beginning
   
     
     
   end
% hierher auslagern
     fclose(fid); %close file
else
   fprintf('file ended')
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Psycho_Inc.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.07.2009, 20:16     Titel:
  Antworten mit Zitat      
vielen, vielen Dank euch beiden, jetzt ist der fehler weg, nachdem ich fclose ausgelagert hatte^^
 
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.