Reading mixed format data containing both text and numbers from a '.txt' file in matlab
32 views (last 30 days)
Show older comments
So I've ha a txt file that starts off with a few lines of text contianing both characters and numbers e.g. seen in text.txt, so I only included one row of data, but it has over 600 rows, which is the data I want to work with.
I have a hard time to finding a way to read/open/load the file and to seperate the unnecesary information from the data that I want to work with. Any tips on how to move forward?
[filename path] = uigetfile([files.path '*.txt; *.inp'],'Choose file');
data = load_data(filename);
So I tried with
function [data] = load_data(filename)
S = fileread(filename);
lines = cellfun(@strtrim, regexp(S, '\r?\n', 'split'),'UniformOutput', 0);
values = cellfun(@(s) cell2mat(textscan(s, '')), lines, 'uniform', 0);
mask = cellfun(@isempty, values);
values(mask) = lines(mask);
data = values(mask);
end
Since I have no idea how to start, and it obviously doesn't work..
0 Comments
Accepted Answer
Stephen23
on 24 Sep 2021
Edited: Stephen23
on 24 Sep 2021
fpt = '.'; % absolute or relative path to where the file is saved.
fnm = fullfile(fpt,'text.txt');
% Count the header lines:
[fid,msg] = fopen(fnm,'rt');
assert(fid>0,'%s',msg)
fgetl(fid); % first line
cnt = 2;
while contains(fgetl(fid),':')
cnt = cnt+1;
end
fclose(fid);
% Import the data:
opts = detectImportOptions(fnm,...
'FileType','delimited',...
'Delimiter','\t',...
'ConsecutiveDelimitersRule','join',...
'NumVariables',11,...
'NumHeaderLines',cnt,...
'VariableNamesLine',cnt+1,...
'VariableNamingRule','preserve',...
'DecimalSeparator',',');
opts = setvartype(opts,'T_start','duration');
opts = setvartype(opts,'Date','datetime');
opts = setvaropts(opts,'Date','InputFormat','dd,MM,uuuu');
T = readtable(fnm, opts);
T.Date.Format = 'uuuu-MM-dd' % ISO 8601 datestamp
2 Comments
Zoltan Varallyay
on 2 Jan 2024
I tried this code but the lines with setvartype provide error:
Error using matlab.io.ImportOptions/getNumericSelection
Unknown variable name: 'T_start'.
Error in matlab.io.ImportOptions/setvartype (line 325)
selection = opts.getNumericSelection(selection);
Error in ReadDatFile (line 32)
opts = setvartype(opts,'T_start','duration');
Stephen23
on 2 Jan 2024
"I tried this code but the lines with setvartype provide error... Unknown variable name: 'T_start'."
Because unlike the OP your data file does not contain a column named "T_start", or has a different format.
Of course you would only try to access a column that exists in your data file. Trying to access a column from someone else's data file that you probably are not using and is nothing like your file format... is unlikely to be successful.
Given that this code was written to import a very specific file format (and the OP did not tell us what created it), have you checked that your file has exactly the same format?
If you want further help please upload a sample data file by clicking the paperclip button.
More Answers (1)
Andres
on 24 Sep 2021
Less textbook, but as you are only interested in the numeric data rows, you may use txt2mat from the file exchange,
% ffn = 'C:\...\text.txt';
D = txt2mat(ffn,'ReplaceRegExpr',{{'[,:](\d+)[,:]',' $1 '}});
0 Comments
See Also
Categories
Find more on Data Type Conversion in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!