How to read out a textfile from a specific line

조회 수: 40 (최근 30일)
jan mischke
jan mischke 2019년 1월 23일
댓글: Rik 2022년 9월 22일
Hello Community,
I have a probably rather easy problem (at least for you guys). I have a textfile (attached) that is structured in lines and collums. And I want two specific collumns out of that file (Plasma_voltage_actual and Plasma_current_actual). Problem is that the first part of that text file has a different structure (just lines). So first I need to delete all the unnecessary stuff before the collumns start (actually no idea how to do that). That would be everything up to the line with which says "DATA RECORDINGS". What I want in the end is a Matrix with the headlines (Time Pressure Pres_set ...) and then the values for each collumn. Can you help me with that? The goal in the end is to take those two collumns and calculate the mean of them. But I guess I can (hopefully) figure that out on my own.
Thank you very much :)

채택된 답변

Stephen23
Stephen23 2019년 1월 23일
편집: Stephen23 2019년 1월 23일
opt = {'Delimiter','\t', 'CollectOutput',true};
[fid,msg] = fopen('pG8.txt','rt');
assert(fid>=3,msg)
% Ignore lines until "DATA RECORDING":
str = '';
while ~strcmpi(str,'DATA RECORDING:') && ~feof(fid)
str = fgetl(fid);
end
% Read table header:
str = fgetl(fid);
hdr = regexp(str,'\t','split');
% Create format string:
fmt = repmat({'%*s'},1,numel(hdr));
idx = ismember(hdr,{'Plasma_voltage_actual(V)','Plasma_current_actual(mA)'})
fmt(idx) = {'%f'};
% Read table:
tmp = textscan(fid,[fmt{:}],opt{:});
fclose(fid);
out = tmp{1}
Which gives:
>> size(out) % nice big matrix of data:
ans =
3208 2
>> out(1:10,:) % not so interesting:
ans =
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
Lets try plotting it
X = 1:size(out,1);
plotyy(X,out(:,1),X,out(:,2))
legend(hdr(idx),'interpreter','none')
Giving:
  댓글 수: 7
Rik
Rik 2022년 9월 22일
Then you didn't explain it clearly enough. The way I read your comment it is not a separate question. The way I read your comment, this will be a trivial step once you implement the answer you already received in your own question. You simply ignore the first element of the cell vector.
Rik
Rik 2022년 9월 22일
I'm just saying the solution provided in that thread will also work for the problem you describe here. You're free to ignore the advice if you wish.
You want to read text, the other answer shows you how to read text. I don't understand why you are creating a new problem when you have a solution that can trivially be adapted.

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

추가 답변 (1개)

Jeremy Hughes
Jeremy Hughes 2019년 1월 23일
You might try READTABLE with import options:
>> opts = detectImportOptions(filename)
% Check that the number of header lines looks right
>> opts.SelectedVariableNames = {... the names you want to read ...}
>> T = readtable(filename,opts)

카테고리

Help CenterFile Exchange에서 Large Files and Big Data에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by