Extract matching row from another cell array
    5 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Elysi Cochin
      
 el 9 de Abr. de 2023
  
    
    
    
    
    Comentada: dpb
      
      
 el 10 de Abr. de 2023
            I have attached 2 mat-files named all_files.mat and full_details.mat
Each row in all_files.mat has a row as shown in image below

I wanted to separate it into 3 parts as shown in yellow, green and blue
I have written a code below to separate it into 3 parts into str1, str2 and str3
load all_files
for i = 1 
    temp = all_files{i};
    kdash = strfind(temp,'_');
    kdot = strfind(temp,'.');
    str1 = temp(1:kdash(1)-1);
    str2 = temp(kdash(1)+1:kdash(2)-1);
    str3 = temp(kdash(2)+1:kdot(1)-1);
end
load full_details
Now I wanted to get the row from full details which satisfies the below condition,
str1 matches the string in column1_of_full_details && 
str2 matches column2_of_full_details &&
str3 matches column3_of_full_details &&
column7_of_full_details == 'English'
If does not exist go to the next row in all_details
There will be many rows satisfying this condition. So I would like to get the row with the longest description, that string in column8_of_full_details
and save the row from all_files and the description from full_details
For example, if 
temp = 'mv89psg6zh4_33_46.avi';
After the satisfying the 4 conditions, my result would be (Please Note: The below output has more rows. For understanding I have displayed only 3 rows)

and then I would like to get the longest string from the last column and save it along with all_files in a new variable as

Please could someone help to to do the condition check with more than 1 condition and to find the longest string from a column
1 comentario
  dpb
      
      
 el 9 de Abr. de 2023
				load https://www.mathworks.com/matlabcentral/answers/uploaded_files/1350039/all_files.mat
Respuesta aceptada
  dpb
      
      
 el 9 de Abr. de 2023
        Air code; the load operation didn't work online...
>> load all_files
>> pieces=split(extractBefore(all_files,'.'),'_');
Error using split (line 99)
Element 14 of the text contains 3 delimiters while the previous elements have 2. All elements must contain the same number of delimiters. 
>> all_files(12:15)
ans =
  4×1 cell array
    {'-Ms9tsWmhyU_80_95.avi'  }
    {'-YI0cxuNcq8_262_272.avi'}
    {'-_aaMGK6GGw_57_61.avi'  }
    {'-_hbPLsZvvo_172_179.avi'}
>> 
on local machine.
You've got inconsistently defined data in the all_files file -- whassup w/ that?  Is the leading underscore actually in the other data file to match or do the filenames have to be cleaned up first?  
>> all_files=strrep(all_files,'-_','-');
>> pieces=split(extractBefore(all_files,'.'),'_');
Error using split (line 99)
Element 36 of the text contains 3 delimiters while the previous elements have 2. All elements must contain the same number of delimiters. 
>> all_files(34:38)
ans =
  5×1 cell array
    {'-s4-6QTT7HE_235_241.avi'}
    {'-t-ZWaJeH-o_0_15.avi'   }
    {'-uT_1VDvXok_8_15.avi'   }
    {'-vKO3uSG6Do_3_14.avi'   }
    {'-vg3vR86fu0_1_6.avi'    }
>> 
Well, now you've got even more underscores buried inside the filenames.
This isn't going to work as you've described at all; your file-naming convention isn't consistent.
2 comentarios
  dpb
      
      
 el 10 de Abr. de 2023
				But so far you don't have a unique definition of what is a field delimiter and what is data with which to know what to do for all cases.
Más respuestas (0)
Ver también
Categorías
				Más información sobre Cell Arrays 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!

