A slight modification of the textscan command I provided to your question the other day will read the file. (You never explained how "::" should be interpreted.) What do you mean by "I read each filed alone of a one row, textscan do not work with it."? If you don't need a column add "*" after "%", e.g. "%*d" to suppress the first column.
Thus
>> cac = txt2m
cac =
[3x1 int32] {3x1 cell} {3x1 cell}
>> cac{:}
ans =
1
2
8
ans =
'Toy Story (1995) '
'Jumanji (1995) '
'Tom and Huck (1995) '
ans =
'Animation|Children's|Comedy'
'Adventure|Children's|Fantasy'
'Adventure|Children's'
>>
where the function, txt2m, is given by
function cac = txt2m()
fid = fopen('cssm.txt');
cac = textscan( fid, '%d%s%s' ...
, 'Delimiter' , ':' ...
, 'CollectOutput' , false ...
...
...
, 'MultipleDelimsAsOne' , true ...
, 'Whitespace' , '' );
fclose( fid );
end
then regexp and str2num
>> regexp( cac{2}, '\d{4}', 'match' )
ans =
{1x1 cell}
{1x1 cell}
{1x1 cell}
>> ans{:}
ans =
'1995'
ans =
'1995'
ans =
'1995'
--- In response to the answer below ---
This modified function, txt2m, reads and parses your file. It reads the file to a string with the function, fileread (thanks Walter, I didn't know of that one), and replaces "::" by "¤" (knock on wood). I just picked a character on the keyboard.
Try
>> cac = txt2m()
cac =
[13x1 int32] {13x1 cell} {13x1 cell}
>>
where
cssm.txt contains your 13 rows
and where
function cac = txt2m()
str = fileread( 'cssm.txt' );
str = strrep( str, '::', '¤' );
cac = textscan( str, '%d%s%s' ...
, 'Delimiter' , '¤' ...
, 'CollectOutput' , false ...
...
...
, 'MultipleDelimsAsOne' , true ...
, 'Whitespace' , '' );
end
Best Answer