How to read specific part of the text file?

47 Ansichten (letzte 30 Tage)
Lolipop
Lolipop am 13 Dez. 2014
Kommentiert: Lolipop am 13 Dez. 2014
So, I have text file in Notepad data.txt which contain all information about some image for example
  • image1.gif
  • gif
  • 256
  • 256
  • 155.992455 321.222455 995.452774 741.123478
  • 15 24 35
  • 41 52 64
  • 58 59 50
so I have name of image, extension,height, width, matrix of gray image and matrix of image in this order in file. I made function which receives namefile and parameter which is needed to be read. So I want that the result of function be that parametar from text file for example function:
readformfile('data.txt','MatrixOfImage')
and result should be this
15 24 35
41 52 65
58 59 50
I have written the function but it reads all text from file and I don't know how to read only specific parameter from file
function result=readfromfile(namefile,parameter)
result=fileread(namefile);
end
I would be very grateful if someone could help me.
  2 Kommentare
dpb
dpb am 13 Dez. 2014
I'd probably just build a routine that reads the whole file then sends back the section(s) requested. That way it's all one function to maintain and simply a choice of which data to return. Of course, if you think you're going to be looking at the same file over and over for various pieces, that's a lot of overhead so I'd try to rearrange my higher level usage to avoid that. Memory is cheap these days...so what if you've got some extra stuff hanging around waiting to be used later?
Lolipop
Lolipop am 13 Dez. 2014
Well I made some routine that reads file by section. I just put for example # at the end of every section and then with function strread do this
[a,b,c,d,e,f]=strread(text,'%s %s %s %s %s %s','delimiter','#');
And then I have all section but how to get one I need?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

per isakson
per isakson am 13 Dez. 2014
Bearbeitet: per isakson am 13 Dez. 2014
With Matlab there are many ways. The one below is one of them. Regard the first five lines as a "header" and use textscan.
>> num = cssm()
num =
15 24 35
41 52 64
58 59 50
where
function num = cssm()
fid = fopen( 'cssm.txt' );
cac = textscan(fid,'%f%f%f', 'Headerlines',5, 'CollectOutput',true );
fclose( fid );
num = cac{1};
end
and cssm.txt contains
image1.gif
gif
256
256
155.992455 321.222455 995.452774 741.123478
15 24 35
41 52 64
58 59 50
&nbsp
In response to comment
Try this modified function
>> out = cssm( 'cssm1.txt', 'name_of_image' )
out =
image1.gif
>> out = cssm( 'cssm2.txt', 'color_image' )
out =
78 44 28
77 32 71
55 12 53
>> out = cssm( 'cssm2.txt', 'RBG_image' )
name_of_image, extension, height, width, gray_image, color_image
out =
[]
>> out = cssm( 'cssm1.txt', 'width' )
out =
256
where
function out = cssm( filespec, param )
fid = fopen( filespec );
cac = textscan( fid, '%s', 'Delimiter','\n', 'CollectOutput',true );
fclose( fid );
switch lower( param )
case 'name_of_image'
out = cac{1,1};
case 'extension'
out = cac{2,1};
case 'height'
out = str2double( cac{3,1} );
case 'width'
out = str2double( cac{4,1} );
case 'gray_image'
out = str2num( cac{5,1} );
case 'color_image'
out = str2num( char(cac(6:8,1)) );
otherwise
str = 'name_of_image, extension, height, width, gray_image, color_image';
disp( str )
out = [];
end
end
and cssm2.txt contains
image2.gif
gif
128
128
456.972255 333.2147455 895.441274 125.111278
78 44 28
77 32 71
55 12 53
  9 Kommentare
per isakson
per isakson am 13 Dez. 2014
"explain me this line"
out = str2num( char(cac(6:8,1)) );
Run
cac = { '15 24 35'
'41 52 64'
'58 59 50' }
% convert the cell array of strings to a character array
str = char( cac )
% convert the character array to a double array
num = str2num( str )
it displays
cac =
'15 24 35'
'41 52 64'
'58 59 50'
str =
15 24 35
41 52 64
58 59 50
num =
15 24 35
41 52 64
58 59 50
and run
>> whos
Name Size Bytes Class Attributes
cac 3x1 384 cell
num 3x3 72 double
str 3x8 48 char
Lolipop
Lolipop am 13 Dez. 2014
I got it! You really helped me a lot...Thank you for your time and if there is some another way to thank you,tell me :)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Convert Image Type finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by