How I can modify this code to split the cells of a cell array?
    6 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    MA
 el 19 de Sept. de 2021
  
    
    
    
    
    Comentada: Walter Roberson
      
      
 el 6 de Oct. de 2022
            I am working on the following code, that it will go through some folder and read data files as tables,
for k = 1 : length(theFiles)
  baseFileName = theFiles(k).name;
  fullFileName = fullfile(myFolder, baseFileName);
  t = readtable(fullFileName);
  %output = t.output;
  %fprintf(1, 'Now reading %s\n', fullFileName);
 idxBkpt = find(diff([t.GDALT])<0);
 split_indices = sort(1+idxBkpt);  %beginnings of blocks
 blk = diff([1 reshape(split_indices, 1, []) size(t,1)+1]);
 splits = mat2cell(t, blk, size(t,2));
 celldisp(splits);
end
Now what I am struggling with is the following: 
I want to create a matrix that in the first cell of each row it will store the name of the data file i am processing and in the rest of the cells of that row it will store the cell array 'splits', any efficient way to do that? 
0 comentarios
Respuesta aceptada
  Walter Roberson
      
      
 el 19 de Sept. de 2021
        nfiles = length(theFiles);
results = cell(nfiles,2);
fullnames = fullfile({theFiles.folder}, {theFiles.name});
results(:,1) = fullnames(:);
for k = 1 : nfiles
  fullFileName = fullnames{k};  
  t = readtable(fullFileName);
  idxBkpt = find(diff([t.GDALT])<0);
  split_indices = sort(1+idxBkpt);  %beginnings of blocks
  blk = diff([1 reshape(split_indices, 1, []) size(t,1)+1]);
  splits = mat2cell(t, blk, size(t,2));
  results{k,2} = splits;
end
So results will be a cell array that is nfiles x 2. results{k,1} will be filename #k. results{k,2} will be the cell array splits -- and you will need to index that cell array to get to the pieces.
You cannot just use a cell array with N + 1 columns because it appears that the number of splits for each file may be different.
11 comentarios
  Walter Roberson
      
      
 el 6 de Oct. de 2022
				t1 = JRO(JRO.YEAR == Years(1), :);
doy = unique(t1.DayOfYear);    %changed
DATA = cell(length(doy),1);
 for n = 1 : length(doy)
    t2=t1(t1.DayOfYear == doy(n), :);  
      idxBkpt = find(diff([t2.GDALT])<0);
      split_indices = sort(1+idxBkpt);  %beginnings of blocks
      blk = diff([1 reshape(split_indices, 1, []) size(t2,1)+1]);
      splits = mat2cell(t2, blk, size(t2,2));
      DATA{n,1} = splits;
 end
numsplits = cellfun(@numel, DATA(:,1));
maxsplits = max(numsplits);
packed = cell(length(doy), 1+maxsplits);
for K = 1 : length(doy)
   packed(K,2:numsplits(K)+1) = DATA{K,1};   %changed
end
and remember to put the file names into packed(:,1)
Más respuestas (0)
Ver también
Categorías
				Más información sobre Logical en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


