Clear Filters
Clear Filters

Different computer save folder

11 views (last 30 days)
Debbie Oomen
Debbie Oomen on 12 Oct 2017
Commented: Debbie Oomen on 1 Nov 2017
I have a script that I need to share with my professor. I used the commands uigetfile and uigetdir so that my professor can select my sent files for analysing but I was wondering if there was an easier way that my professor could use the scripts and if there is a way that he can write everything to a folder? I have already seen something like this : [pathname ] but I can not figure it out. Please help
  6 Comments
OCDER
OCDER on 13 Oct 2017
Edited: OCDER on 13 Oct 2017
I see, so you want to save the output folder to the parent directory of the script? EX:
Professor computer has:
C:/ThisDir/Script
C:/ThisDir/EMG
You want script to automatically find the EMG files, and then save results to:
C:/ThisDir/output.xlsx ? or
C:/ThisDir/Ouput/output.xlsx ?
Also, I'm assuming output.xlsx is saving T, f, fs, etc for every .emg file (so 100 emg files will give you 100 data rows) ?
Debbie Oomen
Debbie Oomen on 13 Oct 2017
Yes. The professor can click on the folder with the multiple raw EMG data files (for example folder name: testsubject 1) and then let Matlab performs the analysis on every file in that folder. Then I want matlab to write all analysed data to a new excel sheet in the same folder (testsubject 1) on his computer

Sign in to comment.

Accepted Answer

OCDER
OCDER on 13 Oct 2017
Edited: OCDER on 13 Oct 2017
Try this out and see if it works. It assumes there an "emg" subfolder. If it can't find it, then it will ask prof to select the dir. Also, "filename" is changed to the full filename. Once the loop is done, it will save all results to a summary.xlsx file in the same dir of mydir (emg directory).
%Figure out key folder paths
ScriptDir = fileparts(mfilename('fullpath')); %script subfolder
MainDir = fileparts(ScriptDir); %folder above the script folder
mydir = fullfile(MainDir, 'emg'); %emg subfolder
%Select the emg folder
if ~exist(EmgDir, 'dir') %If the default emg folder is not there, ask prof to select it
mydir = uigetdir(EmgDir);
end
if isnumeric(mydir)
error('No directory selected');
end
%Get files, not folders
myfiles = dir(fullfile(mydir,'*.*'));
myfiles([myfiles.isdir]) = []; %skip . and .. and all other folders
results = cell(length(myfiles), 1);
for i=1:length(myfiles)
%filename = myfiles(i).name; %this needs the directory too.
filename = fullfile(mydir, myfiles(i).name); %this way, you get the dir + filename
[~, basename, ext] = fileparts(filename);
if isempty(basename)
fprintf('skipping dot file "%s"\n', filename)
continue %go on to next file
end
switch ext
case {'.xls', '.xlsx'}
fprintf('xlsread for file "%s"\n', filename);
emg = xlsread(filename);
case '.csv'
fprintf('it is csvread for file "%s"\n', filename);
emg = csvread(filename);
otherwise
fprintf('Warning: file "%s" is unrecognized extension\n', filename);
continue %go on to next file
end
fprintf('processing data with %d rows and %d columns\n', size(emg,1), size(emg,2));
%%%Plot signal
t = emg(:,1);
y1 = emg (:,2);
N=length(y1);
ls=size(y1);
f = 1/N; %frequency
fs= 1000; %sampling frequency
T = 1/fs; %period between each sample
results{i} = {filename N mat2str(ls) f fs T}; %Saving results (Fixed version)
end
%Saving everything to excel in the same dir of the emg files
targetFile = fullfile(mydir, 'summary.xlsx');
xlswrite(targetfile, cat(1, results{:}));
  1 Comment
OCDER
OCDER on 13 Oct 2017
Oh, didn't realize ls was a matrix. Change this:
results{i} = {filename N ls f fs T}; %ERROR
results{i} = {filename N mat2str(ls) f fs T}; %FIXED
%but, ls will be saved something like '[1 100]'.
%Another way is to split ls into row & col components like this:
results{i} = {filename N ls(1) ls(2) f fs T}; %FIXED
NOTE: consider replacing ls with something else as this is a matlab function. Also, reserve the Answer sections for answers only, to prevent confusion as to which is an answer.
Hope this helps!

Sign in to comment.

More Answers (1)

Matthew
Matthew on 13 Oct 2017
Edited: Matthew on 13 Oct 2017
A simple way to do this is to use mfilename to find the path to where the file is being run on the professor's computer.
[folderPath,fileName] = fileparts(mfilename('fullpath'));
OutputPath = fullfile(folderPath,'OutputDirectory');
if ~exist(OutputPath,'dir')
mkdir(OutputPath)
end
outputFile1 = fopen(fullfile(OutputPath,'OutputFile1.txt'),'w');
fclose(outputFile1);
  1 Comment
Debbie Oomen
Debbie Oomen on 1 Nov 2017
How do I get specific parameters written to this outputFile? For example: median frequency and filename

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!