GUI How to insert multiple csv into uitable?

5 views (last 30 days)
Hello, I am new in Matlab and I am using Matlab 2019a version. I have window build in guide in Matlab, you can se how the window looks like in png file whitch I insert there. I tried many combination, some of it works but it is still not that I need and I don't know how to combine this into one which will be work. My problem is that that I have csv file which is insert there also, It includes first two rows of texts that I don't want to shows and it have first column with date and time and others columns inlude measure values which is numbers. So I want with one button to insert multiple csv into uitable without first two rows and with second button I want plot them. Now what I have. I am using uigetfile with MultiSelect on, then when I use xlsread I am able to read data but I am not able select multiple csv.
  • [num,txt,raw] = xlsread(file);
  • (assignin('base', 'data', raw));
  • set(handles.uitable1, 'Data', raw);
  • setappdata(0,'table',raw);
second what I have is this, this one is usefule for skip the first two row but can't choose multiple csv file
  • T = readtable(file,'HeaderLines',1);
  • C = table2cell(T);
  • (assignin('base', 'data', C));
  • set(handles.uitable1, 'Data', C);
  • setappdata(0,'table',C);
third is this which can be use for multiple choise
  • ds = datastore(file);
  • mydata = readall(ds);
  • C = table2cell(mydata);
  • (assignin('base', 'data', C));
  • set(handles.uitable1, 'Data', C);
  • setappdata(0,'table',C);
in the second button I have this, it is work with my date and time type
  • table = getappdata(0, 'table');
  • str = convertCharsToStrings(table(:,1));
  • DateString = datestr(str);
  • DateNumber = datenum(DateString);
  • B.Var1 = datetime(DateNumber, 'convertFrom', 'datenum','Format', 'dd.MM.yy HH:mm');
  • data = str2double(table);
  • ydata1 = data(:,2);
  • axes(handles.axes1);
  • plot(B.Var1,ydata1,'--','Color','#4DBEEE');
So it is possible to use uigetfile and choose multiple csv file with date and time and numbers and skip the first two rows and insert them into uitable and with second button plot them from uitable. Thank you very much with some idea how to deal with this. I am already lost.

Accepted Answer

Jalaj Gambhir
Jalaj Gambhir on 7 Apr 2020
Hi,
First of all, for your problem, I would recommend you to use App Designer instead of GUIDE as recommended here.
You need to break your problem into components.
  • Select multiple csv files, and read them individually.
This can be done using readTable as it provides flexibility to specify the number of header lines to be ignored, which is 2 in your case.
[filename, path] = uigetfile('*.csv','Select csv files','MultiSelect','on');
x = {}
for i = 1:length(filename)
data = readtable(fullfile(path,filename{i}), 'HeaderLines',2);
x{i} = data;
end
big_table = vertcat(x{:});
app.UITable.Data = big_table;
I created this in AppDesigner, button push callback function. This will help you read multiple csv files, ignore 2 header lines of each file and output the relevant data in a 'table' format. All these individual tables can then be merged into one big table, and used directly for displaying.
  • In your plotData callback, you can add your code to read the data from the UITable and plot it, using the code you have mentioned in your question.
Hope this helps!
  3 Comments
Jalaj Gambhir
Jalaj Gambhir on 13 Apr 2020
Are you saying that in GUIDE, for the same csv file, readtable is working perfectly while in AppDesigner it is not? I doubt that might be the case.
Sarlota Duskova
Sarlota Duskova on 14 Apr 2020
Edited: Sarlota Duskova on 16 Apr 2020
I am apologize, it is my bad. I did this and now it is working fine:
  • data = readtable(fullfile(path,filename{i}), 'Delimiter', '\t ;', 'MultipleDelimsAsOne', true);

Sign in to comment.

More Answers (0)

Categories

Find more on Migrate GUIDE Apps in Help Center and File Exchange

Products


Release

R2019a

Community Treasure Hunt

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

Start Hunting!