I want to read this text file from Matlab directly and want to import data of all columns into work space in an array.

3 次查看(过去 30 天)
fid = fopen('1.txt');
a = textscan(fid,'%s%s%s%s%s%s%s','Delimiter','','Headerlines',4);
lines=a{1:7};
fclose(fid)

采纳的回答

Walter Roberson
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
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));

请先登录,再进行评论。

更多回答(2 个)

Jeremy Hughes
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.

Wei-Rong Chen
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
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
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 CenterFile Exchange 中查找有关 Marine and Underwater Vehicles 的更多信息

标签

尚未输入任何标签。

Community Treasure Hunt

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

Start Hunting!

Translated by