map first field to second field in txt file
조회 수: 1 (최근 30일)
이전 댓글 표시
hi,
I have this txt file :
1::Toy Story (1995) ::Animation|Children's|Comedy
2::Jumanji (1995) ::Adventure|Children's|Fantasy
8::Tom and Huck (1995) ::Adventure|Children's
I want to map for example 1 into animation, and 2 into adventure 8 into adventure i.e ,i need creat txtfile has two columns , the first column contains 1,2,8 and second column contains animation,adventure,adventure
please, how do that thanks in advance
댓글 수: 0
채택된 답변
per isakson
2012년 7월 31일
편집: per isakson
2012년 8월 5일
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 ...
... , 'EmptyValue' , -999 ...
... , 'ExpChars' , '' ...
, '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 ...
... , 'EmptyValue' , -999 ...
... , 'ExpChars' , '' ...
, 'MultipleDelimsAsOne' , true ...
, 'Whitespace' , '' );
end
댓글 수: 13
per isakson
2012년 8월 3일
편집: per isakson
2012년 8월 3일
- What did you do? What does your new code look like?
- How does it behave? What output? What error message?
Why do you expect me to guess?
추가 답변 (1개)
huda nawaf
2012년 8월 4일
편집: Walter Roberson
2012년 8월 4일
댓글 수: 3
per isakson
2012년 8월 4일
편집: per isakson
2012년 8월 4일
See my answer above. I hope the lines you don't show don't contain "¤".
참고 항목
카테고리
Help Center 및 File Exchange에서 Characters and Strings에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!