split array to subarray and save it as csv file

Hi,
I have a csv file 6 x1086 I want to split it to 181 csv files each files 6x6 and save those files.
the first csv file will have the first 6 columns 1:6 , the second csv file will have the second 6 columns i.e. 7:12 ...etc.
I want to give name for each csv file for example: result1.csv , result2.csv ,...,result181.csv
Can you please help me with that. Thanks in advance

 Akzeptierte Antwort

Voss
Voss am 7 Mär. 2023

0 Stimmen

fn = 'your\csv\file.csv';
pn = 'folder\where\you\want\the\results\to\go';
n = 6;
C = readcell(fn);
for ii = 1:size(C,2)/n
writecell(C(:,(ii-1)*n+(1:n)),fullfile(pn,sprintf('result%d.csv',ii)));
end

6 Kommentare

Az.Sa
Az.Sa am 7 Mär. 2023
Bearbeitet: Az.Sa am 7 Mär. 2023
Thank you very much!
I received an error says : Error using readcell (line 140)
First argument must be a string array, character vector, or cell array of character
vectors.
My csv file contains numbers only with no header. Do I nead to reshape it
such as : ww = reshape(w, 6, 6, []); ?
I tried to plug in ww in C = readcell(ww); but I still receive an error. Any advice to solve the problem is highly appreciated
Make sure you are passing a character vector to readcell, as I do in the answer:
fn = 'your\csv\file.csv'; % replace this with your file's name (full path)
C = readcell(fn);
You do not need to reshape it, no.
Since it is all numbers, you could use readmatrix/writematrix, but readcell/writecell also should work. The main thing is to pass a file name, not something else.
Az.Sa
Az.Sa am 7 Mär. 2023
thank you very much!
Voss
Voss am 7 Mär. 2023
You're welcome!
Az.Sa
Az.Sa am 8 Mär. 2023
Bearbeitet: Az.Sa am 8 Mär. 2023
Hi,
if my matrix C is 6 x 4005
ans I want to split it to submatrix with following formula
frist submatrix c1: the first 6x230 observations
c1=C(:,1:230);
the second submatrix c2: is 6 x 230 observations as well but I will delet the first 20 observations from c1 and keep the rest 200 and add to them the following 20 observations from C. i.e.
c2=C(:,21:250);
the third submatrix c3: 6x230 observation, we remove the first 20 observation from c2 ,keep the 200 from c2 and add the following 20 observation from C . i.e.
c3=C(:,40:270);
and so on for the rest of the submatrix. so I am expecting to have 181 submatrix.
I tried to to change n=230 but in total I received only 17 submatrix which is only taking the 230 observations from C succesively which I beleive because of the formula C(:,(ii-1)*n+(1:n) )
Can you please help how to adjust the formula. Thank you
n = 230;
m = 20;
for ii = 1:(size(C,2)-n)/m+1
writecell(C(:,(ii-1)*m+(1:n)),fullfile(pn,sprintf('result%d.csv',ii)));
end
This will give you 189 sub-matrices: C(:,1:230), C(21:250), C(41:270), ..., C(3741:3970), C(3761:3990)
(3761-1)/20+1 = 189
And the last one ends with 3990 not 4005, i.e., the last 15 columns of C will be left over.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Descriptive Statistics finden Sie in Hilfe-Center und File Exchange

Tags

Gefragt:

am 7 Mär. 2023

Kommentiert:

am 8 Mär. 2023

Community Treasure Hunt

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

Start Hunting!

Translated by