MATLAB Answers

Importing txt files and using loops

6 views (last 30 days)
Pouyan Msgn
Pouyan Msgn on 11 Mar 2020
Answered: BobH on 11 Mar 2020
I have three txt files and I want to use their nummerical data in Matlab
How can I ignore and neglect non-numeric texts? I want Matlab to import just numbers, there two columns of numbers in each file and I want just those numbers
I have more than one file. Here I have three files. Is it possible to use for loop to import these files and buy time?

  0 Comments

Sign in to comment.

Accepted Answer

Mario Malic
Mario Malic on 11 Mar 2020
Edited: Mario Malic on 11 Mar 2020
%% Reading the file
FID_F_1 = fopen(filename , 'r');
i = 1;
tline = fgetl(FID_F_1);
A{i} = tline;
while ischar(tline)
i = i+1;
tline = fgetl(FID_F_1);
A{i} = tline;
end
fclose(FID_F_1);
Now all text is saved in variable A.
for ii = line where data starts : line where data ends
X_Temp = str2num(A{ii}); %converts the string line into array
X = X_Temp(1,1); %
Y = X_Temp(1,2); % Getting the values
end

  0 Comments

Sign in to comment.

More Answers (2)

Subhamoy Saha
Subhamoy Saha on 11 Mar 2020
Edited: Subhamoy Saha on 11 Mar 2020
Here I have tested with your J94.txt file
filename = 'C:\Users\Desktop\J94.txt'; %% change filepath accordingly
delimiter = ' ';
startRow = 33;
formatSpec = '%f%f%*s%*s%[^\n\r]';
fileID = fopen(filename,'r');
textscan(fileID, '%[^\n\r]', startRow-1, 'WhiteSpace', '', 'ReturnOnError', false, 'EndOfLine', '\r\n');
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'MultipleDelimsAsOne', true, 'TextType', 'string', 'EmptyValue', NaN, 'ReturnOnError', false);
fclose(fileID);
Col1 = dataArray{:, 1};
Col2 = dataArray{:, 2};
clearvars filename delimiter startRow formatSpec fileID dataArray ans;
You can use multiple files using loop if those file names are in some order. Otherwise use uigetfile().

  0 Comments

Sign in to comment.


BobH
BobH on 11 Mar 2020
Similar to Mario Malic but using regular expressions
R = []; % init to empty
fid = fopen('J94.txt','r');
t = fgetl(fid);
while( ischar(t) )
reNum = '([0-9.E\+]+)';
m = regexp(t, ['^\s*' reNum '\s+' reNum], 'tokens','once');
if( length(m) == 2 ) % found two matches in the line
R(end+1,:) = cellfun(@str2num, m);
end
t = fgetl(fid);
end
fclose('all');

  0 Comments

Sign in to comment.

Tags

Community Treasure Hunt

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

Start Hunting!