Extract matching row from another cell array
3 次查看(过去 30 天)
显示 更早的评论
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 个评论
dpb
2023-4-9
load https://www.mathworks.com/matlabcentral/answers/uploaded_files/1350039/all_files.mat
采纳的回答
dpb
2023-4-9
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 个评论
dpb
2023-4-10
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 File Operations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!