Text file data segregation
이전 댓글 표시
I want to segregate a text file which contains data. Segregation should be done on the basis of asterix (*) in the text file. So the data should be read into one variable and when there is asterix it should start reading the data in another variable.
Eg.
**DATA1
.........................................
.........................................
.........................................
.........................................
**DATA2
........................................
..........................................
.........................................
..........................................
**DATA3
.............................................
...........................................
............................................
...................................
......................................
Contents below **DATA1 should be stored in DATA1 and should be there in workspace to view similarly contents under DATA2 should be visible. The code should automatically read that there is double ** and start reading the next data into that variable.
답변 (2개)
type test.txt
result = {};
fid = fopen("test.txt", "rt");
while ~feof(fid)
i = fscanf(fid, "**DATA%d");
result{i} = fscanf(fid, "%f")';
end
result
Walter Roberson
2022년 9월 20일
Use fileread() to read the file as a character vector. Use
parts = regexp(TheVector, '\*\*', 'split');
parts(cellfun(@isempty, parts)) = [];
Now parts is a cell array of character vectors. The ** has been removed, so the sections would start immediately with the DATA characters. Process each section as is appropriate for your purposes.
For example it might make sense to use textscan() of the text with 'headerlines', 1, and with format '' (empty string). When you use textscan() with empty string as the format, and the data is numeric columns, then textscan will automatically figure out how many columns are present.
That said, if you fopen() the file and you ask to textscan() the fid with '' format, then it should stop reading at each point it encounters the ** since that is not something that can be interpreted as numeric. You would then fgetl() and save the variable name, and then you would run another textscan() which would pick up from after that line.
카테고리
도움말 센터 및 File Exchange에서 Text Data Preparation에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!