Importing txt files and using loops

9 Ansichten (letzte 30 Tage)
Pouyan Msgn
Pouyan Msgn am 11 Mär. 2020
Beantwortet: BobH am 11 Mär. 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?

Akzeptierte Antwort

Mario Malic
Mario Malic am 11 Mär. 2020
Bearbeitet: Mario Malic am 11 Mär. 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

Weitere Antworten (2)

Subhamoy Saha
Subhamoy Saha am 11 Mär. 2020
Bearbeitet: Subhamoy Saha am 11 Mär. 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().

BobH
BobH am 11 Mär. 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');

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by