Effacer les filtres
Effacer les filtres

Reading textfile using fopen and textscan

3 vues (au cours des 30 derniers jours)
Sam
Sam le 6 Oct 2020
Modifié(e) : Stephen23 le 6 Oct 2020
Hello,
I've got a textfile 'test_file.txt' which you can find in attachment.
At the bottom of this textfile, you can see ' [Channel Data] '. I would like to extract all headers beneath ' [Channel Data] ' except the last 2. So I would like to extract the headers ' S.No., Data&Time, hf2, hf3, hf4, hf10, hf6, tc18, tc3, tc5, tc7, tc9, tc11, tc12, tc13, tc15, tc16, tc2'. So the 'Alarm in Channels' and the 'Alarm Out' are left out. In total this would give 18 headers. (See picture in attachment for clarification)
I also would like to extract all the data in the rows beneath the headers. These numbers are seperated by a comma (comma delimiter) and in total there are also 18 numbers in 1 row. I am familiar using fopen and textscan, but I'm not sure how to use it to get what I would like to have...
Thank you
  2 commentaires
Stephen23
Stephen23 le 6 Oct 2020
Modifié(e) : Stephen23 le 6 Oct 2020
"Can someone help me out please?"
Please upload some sample data that we can use (screenshots are pretty but quite useless) by clicking the paperclip button.
Sam
Sam le 6 Oct 2020
I couldn't agree more. Apologies for the inconvenience. I've uploaded the data. Thank you!

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 6 Oct 2020
Modifié(e) : Stephen23 le 6 Oct 2020
This reads your file:
opt = {'Delimiter',',', 'CollectOutput',true};
[fid,msg] = fopen('test_file.txt','rt');
assert(fid>=3,msg)
str = '';
while ~strcmpi(str,'[Channel Data]')
str = strtrim(fgetl(fid));
end
str = fgetl(fid);
hdr = regexp(str,'[^,]+','match');
hdr(strncmpi(hdr,'Alarm',5)) = [];
tmp = repmat({'%f'},1,numel(hdr));
tmp{strcmpi(hdr,'Date&Time')} = '%s'; % or '%{MM/dd/yyyy HH:mm:ss:SSS}D' for datetime
fmt = [tmp{:},'%*[^\n]'];
out = textscan(fid,fmt,opt{:});
fclose(fid);
Giving:
>> out{1}
ans =
1
2
3
4
5
6
>> out{2}
ans =
'04/23/2020 19:42:52:000'
'04/23/2020 19:42:53:000'
'04/23/2020 19:42:54:000'
'04/23/2020 19:42:55:000'
'04/23/2020 19:42:56:000'
'04/23/2020 19:42:57:000'
>> out{3}
ans =
0.0194 0.0292 0.0089 0.0009 0.0119 20.0000 23.0000 22.8000 24.2000 24.3000 25.1000 24.9000 24.3000 24.8000 25.3000 22.4000
0.0194 0.0292 0.0080 0.0006 0.0125 20.0000 23.0000 22.8000 24.2000 24.3000 25.1000 24.9000 24.3000 24.8000 25.3000 22.4000
0.0191 0.0292 0.0071 0.0006 0.0131 20.0000 23.0000 22.7000 24.2000 24.3000 25.1000 25.0000 24.3000 24.8000 25.3000 22.4000
0.0194 0.0292 0.0063 0.0006 0.0137 20.0000 23.0000 22.7000 24.2000 24.3000 25.1000 24.9000 24.3000 24.8000 25.3000 22.4000
0.0197 0.0292 0.0054 0.0003 0.0143 20.0000 23.0000 22.7000 24.2000 24.3000 25.1000 24.9000 24.3000 24.8000 25.3000 22.4000
0.0197 0.0289 0.0048 0.0003 0.0146 20.0000 23.0000 22.8000 24.2000 24.3000 25.1000 24.9000 24.3000 24.8000 25.3000 22.4000
  1 commentaire
Sam
Sam le 6 Oct 2020
Thank you very much!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Low-Level File I/O dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by