Create table in a for loop with text

6 次查看(过去 30 天)
I am creating a table in a for loop in Matlab. The table should contain the answer for each iteration of the loop.
On each iteration the, the answer that is produced is the name of a soccer player. I want to create a table that stores the list of the names of soccer players. For example
Player
Ronaldo
Messi
When I write the below code, it comes out as NaN.
  1 个评论
Image Analyst
Image Analyst 2021-11-21
After you read this:
attach one of your CSV files and your m-file. We cannot run an image and can't run an m-file with no data.
And I think B should be
B = cell(length(files), 1);
before the loop.

请先登录,再进行评论。

回答(2 个)

Yongjian Feng
Yongjian Feng 2021-11-21
编辑:Yongjian Feng 2021-11-21
Try this:
files = dir('*.csv');
B = {};
for i = 1:length(files)
csv = readtable(files(i).name, 'Range', 'A1:I8'); % Double check please to make sure
Player = csv(1,2);
Player = table2array(Player) % no ; here, print it out for debug. put it back later
%Player=str2double(Player); % WHY? A player's name can't be converted
%to double
B{end+1} = Player;
end
T = table(B', 'VariableName', {'Player'})
  2 个评论
Peter Perkins
Peter Perkins 2021-11-23
编辑:Peter Perkins 2021-11-23
This
Player = csv(1,2);
Player = table2array(Player)
can't be the best way to do this. More than likely
Player = csv{1,2};
or (much) better yet:
Player = csv.Player(1) % or whatever column heading is in the file
Doron Joffe
Doron Joffe 2021-11-24
Thank you very much. This worked perfectly.

请先登录,再进行评论。


Sean de Wolski
Sean de Wolski 2021-11-23
Confused as to why you're using excel ranges with csv input. Either way, this should be doable in one shot with readall(datastore).
ds = datastore("*.csv")
ds % MODIFY the settings to only read the (1,2) element. Specify header rows, text type as string, etc.
T = readall(ds)

Community Treasure Hunt

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

Start Hunting!

Translated by