Error with fgetl....why?
    12 views (last 30 days)
  
       Show older comments
    
    Wesser
 on 12 Sep 2022
  
    
    
    
    
    Commented: Walter Roberson
      
      
 on 12 Sep 2022
            Matlab keeps giving me a hard time:
"Error using fgets
Invalid file identifier. Use fopen to generate a valid file identifier.
Error in fgetl (line 32)
[tline,lt] = fgets(fid);
Error in plot_test (line 11)
        x=fgetl(Node_conc);"
Basically it seems like matlab doesn't like me using fgetl, but why?  I use it in the exact same way in another script and it works fine.  Basically in this code I'm trying to skip the first 11 lines, then copy the 5th column of data into the Node_CONC file which will compile the output from 1000 monte carlo runs of another program. I attached a Obs_Node.out file for reference. I've tried replacing fgetl with fgets and similarily get an error... 
num_sim = 1000;      %1000 monte carlo simulations
Node_CONC=zeros(57759,num_sim);
for i=1:num_sim
    Node_conc = fopen('\Obs_Node.out','r');   % Open monte carlo output file in Path (i) 
    skip_lines=11;   %skip all the lines until the actually output data 
    for k=1:(skip_lines)
        x=fgetl(Node_conc);
    end
    temp = fscanf(Node_conc,'%f',[5,57759]);        %scan the matrix of data
    TEMP = temp';       % transpose data
    temp_Conc = TEMP(:,5);      % select the 5th column (concentration)
    Node_CONC(:,i) = temp_Conc(:);      % save the concentration a new file, one column per iteration of loop
    fclose(Node_conc);
end
adsfgad
Accepted Answer
  Walter Roberson
      
      
 on 12 Sep 2022
        
      Edited: Walter Roberson
      
      
 on 12 Sep 2022
  
      The fopen is failing. You should get in the habit of checking the return value.
Note that for MacOS and Linux, the \ at the beginning of the file name will be treated just like any other character, and will not be a directory separator. But on Windows a \ at the beginning of the file name means that you are referring to a file that is the top level directory of the current disk drive, such as if you had written C:\Obs_Node.out
We recommend that for portability that you build file names using fullfile() instead of using / or \ in the name.
5 Comments
  Walter Roberson
      
      
 on 12 Sep 2022
				    wtf = fullfile('C:\\', 'Users', 'jessi', 'Desktop', 'HydrusMC', 'Simulations', "MC_"+i, 'Obs_Node.out');
However, this is not portable to other operating systems because of the C:\\ -- and your path is likely to be different on the different operating systems.
You might want to consider something like
    wtf = fullfile(userpath, 'HydrusMC', 'Simulations', "MC_"+i, 'Obs_Node.out');
and move the directories to be consistent with that.
Or you might want to consider
    if ispc()
        desktopdir = fullfile(getenv('USERPROFILE'), 'Desktop');
    else
        desktopdir = fullfile(getenv('HOME'), 'Desktop');
    end
    wtf = fullfile(desktopdir, 'HydrusMC', 'Simulations', "MC_"+i, 'Obs_Node.out');
More Answers (0)
See Also
Categories
				Find more on Entering Commands in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!