Reading text file to extract specific data chunks

I have a large text file with important numbers about a certain category. It looks something like this
CATEGORY 1
* 1
* 2
* 3
* 4
CATEGORY 2
* 4
* 5
* 6
* 7
CATEGORY 3
* 8
* 9
* 10
* 11
There are many more categories, but for the example I'll keep it at these two. Depending on a user input, I want to fill a variable, lets call it "numbers" with the numbers under the appropriate category. Say a user inputs "CATEGORY 2", I want the variable "numbers" to be [4 5 6 7]. How could I do this? I'm trying to use fgetl and simply index the number on each line, but I can't get it right. Any help is appreciated!
Edit: Included actual text file being read. Also included the code I've tried with the error I'm getting
component = input('Write the component being analyzed in quotes: ')
fid = fopen(stations_clgrids.txt')
station = [];
i = 1;
if component == 'Fairing'
while ~feof(fid)
line = fgetl(fid);
if (line(1:7) == 'FAIRING')
line_sta = fgetl(fid);
if (line_sta(1)=='*')
station(i) = str2num(line_sta(9:16))
elseif isempty(line_sta)
break
end
end
end
end
Write the component being analyzed in quotes: 'Fairing'
Index exceeds the number of array elements (0).
Error in define_cl_station (line 13)
if (line(1:7) == 'FAIRING')

댓글 수: 1

I have no idea what you want to do with the contents of that file, so I deleted my answer.

댓글을 달려면 로그인하십시오.

 채택된 답변

Image Analyst
Image Analyst 2022년 7월 19일
Try it this way:
% component = input('Write the component being analyzed in quotes: ')
component = 'Fairing'
fid = fopen('stations_clgrids.txt', 'rt')
station = [];
index = 1;
if strcmpi(component, 'Fairing')
while ~feof(fid)
textLine = fgetl(fid);
fprintf('Just read "%s" from file.\n', textLine)
if contains(textLine, 'FAIRING', 'IgnoreCase',true)
starredLine = fgetl(fid);
fprintf(' Just read starred line "%s" from file.\n', starredLine)
if startsWith(starredLine, '*')
station(index) = str2num(starredLine(2:end));
% Increment counter.
index = index + 1;
elseif isempty(starredLine)
break
end
end
end
end
fclose(fid);
% Show in command window
station

댓글 수: 2

Used a variation of this
if strcmpi('Fairing',component) %if the user wants the fairing analyzed
while ~feof(fid) %read until end of file is reached
if size(line,2)>1 %don't read empty lines
if strcmpi('FAIRING CENTERLINE GRIDS',line) %start reading the cl grids
i_1 = i; %set the beginning index
line = fgetl(fid); %read the next line
i = i + 1; %increase the index
chkstr = [line ' ']; %expand the line size to be readable
while ~strcmpi(chkstr(1:3), 'END') %read until the word END is reached next
line = fgetl(fid); %read the line
i = i + 1; %increase the counter
clgrid(i) = str2num(chkstr(9:16)); %fill in the clgrid values
chkstr=[line ' ']; %expand the line again just in case
end
i_2 = i; %set final index where data is no longer read
clgrid = clgrid(i_1+2:i_2); %omit zeros
break;break;break;
else
line = fgetl(fid); %read rest of file
i = i + 1;
end
else
line = fgetl(fid); %read rest of file
i = i + 1;
end
end
Yeah, that's not so good for many reasons, but whatever.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

제품

릴리스

R2019b

태그

질문:

2022년 7월 18일

댓글:

2022년 7월 19일

Community Treasure Hunt

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

Start Hunting!

Translated by