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 (최근 30일)
이전 댓글 표시
fid = fopen('1.txt');
a = textscan(fid,'%s%s%s%s%s%s%s','Delimiter','','Headerlines',4);
lines=a{1:7};
fclose(fid)
댓글 수: 0
채택된 답변
Walter Roberson
2016년 10월 5일
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
Walter Roberson
2016년 10월 5일
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
2016년 10월 6일
You can then convert the timestamps to datetime objects with
datetime(timestamps, 'Format', 'yy-MM-dd HH:mm')
추가 답변 (2개)
Jeremy Hughes
2016년 10월 5일
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
Wei-Rong Chen
2016년 10월 5일
편집: Walter Roberson
2016년 10월 6일
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
Walter Roberson
2016년 10월 5일
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
2016년 10월 5일
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.
참고 항목
카테고리
Help Center 및 File Exchange에서 Data Type Conversion에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!