I want to read this text file from Matlab directly and want to import data of all columns into work space in an array.
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Haqqah Khursheed
am 5 Okt. 2016
Kommentiert: Walter Roberson
am 6 Okt. 2016
fid = fopen('1.txt');
a = textscan(fid,'%s%s%s%s%s%s%s','Delimiter','','Headerlines',4);
lines=a{1:7};
fclose(fid)
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 5 Okt. 2016
Your file appears to contain 10 lines. You ask to skip the first 4, which would leave 6. You then ask to read 7 lines. You are going to have difficulty with the 7th value.
3 Kommentare
Walter Roberson
am 5 Okt. 2016
fid = fopen('1.txt', 'rt');
datacell = textscan(fid, '%s%s%f%f%f%f%f', 'HeaderLines',3);
fclose(fid);
timestamps = strjoin(datacell{1}, {' '}, datacell{2});
numerics = cell2mat(datacell(3:end));
Walter Roberson
am 6 Okt. 2016
You can then convert the timestamps to datetime objects with
datetime(timestamps, 'Format', 'yy-MM-dd HH:mm')
Weitere Antworten (2)
Jeremy Hughes
am 5 Okt. 2016
I suggest the 'CollectOutput' parameter
fid = fopen('1.txt');
a = textscan(fid, '%s%s%s%s%s%s%s', 'Delimiter', '', 'Headerlines', 4, 'CollectOutput', true);
lines = a{1};
fclose(fid)
Also, if you're trying to read just lines, this will work:
fid = fopen('1.txt');
a = textscan(fid, '%[^\r\n]', 'EndOfLine', '\r\n', 'Headerlines', 4, 'Delimiter', '','Whitespace','');
lines = a{1};
fclose(fid);
Your first code might work for the file you have, but the second block is a more robust version for line reading if you have leading spaces, or if you want to capture empty lines.
0 Kommentare
Wei-Rong Chen
am 5 Okt. 2016
Bearbeitet: Walter Roberson
am 6 Okt. 2016
It will be much easier if you use 'readtable' function. For example:
dataTable = readtable('1.txt','Delimiter',your_delimiter,'ReadVariableNames',set_true_if_first_row_is_VarNames);
num_array = table2array(dataTable(:,1:7));
2 Kommentare
Walter Roberson
am 5 Okt. 2016
In R2016b, readtable will interpret the date string '15-04-01' as a date 0015-04-01 unless you specify 'datetimetype', 'text'.
It is possible to specify a format for readtable for the date handling
readtable('1.txt', 'format', '%{yy-MM-dd}D%{HH:mm}D%f%f%f%f%f')
Unfortunately for this purpose it does not seem to be possible to grab the date and time as a single entity, so you end up with two datetime objects in the output and you cannot just add them together.
Walter Roberson
am 5 Okt. 2016
If you use
t = readtable('1.txt', 'format', '%{yy-MM-dd}D%{HH:mm}D%f%f%f%f%f');
then
timestamps = t.Var2 - dateshift(t.Var2, 'begin', 'day') + t.Var1;
This takes into account several arcane behaviours of datetime objects.
Siehe auch
Kategorien
Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!