Filter löschen
Filter löschen

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 Ansichten (letzte 30 Tage)
fid = fopen('1.txt');
a = textscan(fid,'%s%s%s%s%s%s%s','Delimiter','','Headerlines',4);
lines=a{1:7};
fclose(fid)

Akzeptierte Antwort

Walter Roberson
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
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
Walter Roberson am 6 Okt. 2016
You can then convert the timestamps to datetime objects with
datetime(timestamps, 'Format', 'yy-MM-dd HH:mm')

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

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

Wei-Rong Chen
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
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
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.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Marine and Underwater Vehicles finden Sie in Help Center und File Exchange

Tags

Noch keine Tags eingegeben.

Community Treasure Hunt

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

Start Hunting!

Translated by