Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Matlab Updating variables as they go through a loop

  1. Jul 8, 2016 #1

    Larry Gopnik

    User Avatar
    Gold Member

    Hi all,

    This might be a simple question but I cannot seem to find any solution online

    I'm currently building a MatLab code for my project which involves in the ageing of certain artefacts and paintings, I've got most of it built but can't solve the simplest of problems of the start of the code

    It requires loading a certain number of .txt files (the number of which the user specifies) into my code. So far I have for this particular part of the code:

    j=input('Please input the number of data files');
    lw = [400,450,500,550,600,650,700,750,800,880];

    for i = 1:j

    [filename,path]= uigetfile('*.txt','open .txt file');


    end

    How do I get it so that there are multiple filenames saved and so that the previous filename isn't overwritten by the new filename?

    Basically, the code should make filename1, filename2, filename3 and so on from the loop instead of just one filename which is constantly overwritten...

    Thank you

    Larry
     
  2. jcsd
  3. Jul 8, 2016 #2

    Dr Transport

    User Avatar
    Science Advisor
    Gold Member

    concatenate the file names into an array....
     
  4. Jul 8, 2016 #3

    Larry Gopnik

    User Avatar
    Gold Member

    My goodness of course, It's so simple but I missed it! Thank you! What an idiot I am

    Quick question, I'm trying to store the filenames into the array and get errors

    n = 10; %Number of slices
    j=input('Please input the number of data files ');
    lw = [400,450,500,550,600,650,700,750,800,880]; %slices in nm
    z = zeros(n,j);
    pathA = zeros(j);

    for i = 1:j

    [filename,path]= uigetfile('*.txt','open .txt file');
    pathA{i} = (filename);
    end

    disp(z);
    disp(pathA);

    I get the error:

    "Cell contents assignment to a non-cell array
    object.

    Error in Build_1 (line 14)
    pathA{i} = (filename);
    "

    I'm very thankful for the help - up to now I've only used Matlab for pure maths, so I'm finding the more "practical" sides of the code quite difficult and new

    Larry
     
  5. Jul 8, 2016 #4

    Dr Transport

    User Avatar
    Science Advisor
    Gold Member

    Try leaving out the parenthesis in line 14..... also, if there is a \ in the path, that causes problems also
     
  6. Jul 10, 2016 #5
    Larry, the reason why you're getting the error is that you initially created pathA as a 2-D array of doubles with this line:

    pathA = zeros(j);

    Then you triedto index it with braces, which means that you expect it to be a cell array. But it's NOT, hence the error. You should initialize pathA like this:

    pathA = cell(j, 1);

    Then use it like this:

    pathA{i} = filename;

    No parentheses needed. The FAQ will explain it all: http://matlab.wikia.com/wiki/FAQ#What_is_a_cell_array.3F

    You might also like this FAQ on how to process a sequence of files: http://matlab.wikia.com/wiki/FAQ#How_can_I_process_a_sequence_of_files.3F

    Finally having slashes, forward or backward, in your filename string will NOT be a problem.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted