Making a nice and small 'Loding Data' Script

Hey,
I am currently trying to write a script that should be at the beginning of a larger one.
The user would run the script and be asked by the program:
-Where is the file ?
-Filename?
-other (for later)?
The script should then load the requested file into Matlab. It is measurement data in a .txt file.
I searched a lot and tried it like this:
But it doesn't work as hoped
box = msgbox('Hello, blablabla');
%set(box, 'position', [500 500 200 100]);
pause(1.2)
Folder = uigetdir();
Folder_string=string(Folder);
prompt = {'Filename:','other:'};
dlgtitle = 'blablabla';
%size of the window
width = 75;
height = 1;
dims = [height, width];
definput = {'Filename','other'};
answer = inputdlg(prompt,dlgtitle,dims,definput);
Dataname=string(answer(1,1));
other=string(answer(2,1));
%% Import
% Use Var: 'Dataname' and 'Folder' for Import:
Data = load(fullfile(Folder_string,Dataname));
After choosing the path an the filename an error appears. :(
"Error using load Number of columns on line 3 of ASCII f
ile C: \ bla \ bla \ bla \ bla \ bla \ filename must be the same as previous lines.
Error in dialog (line 45) Data = load (fullfile (Folder_s, Dataname));"
Now i dont know what to do......

6 Comments

You need to separate your tasks. Most programs you write should have this structure:
  1. get input (either from the user or from another function)
  2. validate input (parse the input and check if it is correct, throw an error if it isn't)
  3. do actual calculations
  4. prepare results for output (may depend on input, depending on your function)
You are skipping step 2, which is not a smart idea, because you can never trust user input.
In this case however, the issue is due to the contents of the file. You are trying to use load on a text file, which can work. What you need to do is verify that your file can actually be read by load. If the file is not in the correct format, you either need to write code that will read your file in a different way, or throw an error that tells the user to pick a different file.
Your code needs to work outside of the context of a GUI before you can put it in a GUI.
ok, that makes sense thanks a lot.
Which function can then be used for the import that is more general than read ()?
The .txt file is structured as follows:
4 columns with different measurement data
approx. 600 lines.
Just so you have an idea.
Best regards
The load is generally meant to read .mat files. If you want to read .txt files with it you will have to check the documentation for the specific syntax it accepts.
If you share an example file I could write some code that you can adapt. You can use the paperclip icon to attach files.
That would be incredibly friendly.
Here is the .txt file
Data from row 6 downwards ~ row 605 are relevant.
Thank you very much
That looks like a very strange file. It looks like 3 files were merged.
You can select the lines you're interested in like this:
file_contents=fileread('SBA15_Data.txt.txt');
file_contents=strsplit(file_contents,'\n');
file_contents=file_contents(6:605);
Then you only need to parse them to numeric values.
Thank you I'll try it like this tomorrow!

Sign in to comment.

 Accepted Answer

The code below should read your file and convert it to a double array.
file_contents=fileread('SBA15_Data.txt.txt');
file_contents=strsplit(file_contents,'\n');
file_contents=file_contents(6:605);
parse_val=@(str) cellfun(@str2double,strsplit(strtrim(str),' '));
x=reshape(file_contents,[],1);
x=cellfun(parse_val,x,'UniformOutput',false);
x=cell2mat(x);

2 Comments

OK thanks,
how would I have to change your script to open the file from another folder location?
I let the user choose the location and save it in a variable:
Folder = uigetdir();
file_contents=fileread(fullfile(Folder,'SBA15_Data.txt.txt'));

Sign in to comment.

More Answers (0)

Categories

Find more on App Building in Help Center and File Exchange

Products

Release

R2019a

Asked:

on 10 Apr 2020

Commented:

Rik
on 12 Apr 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!