MATLAB Answers

Importing txt files and using loops

2 ビュー (過去 30 日間)
Pouyan Msgn
Pouyan Msgn 2020 年 3 月 11 日
回答済み: BobH 2020 年 3 月 11 日
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?


Mario Malic
Mario Malic 2020 年 3 月 11 日
編集済み: Mario Malic 2020 年 3 月 11 日
%% 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;
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

その他の回答 (2 件)

Subhamoy Saha
Subhamoy Saha 2020 年 3 月 11 日
編集済み: Subhamoy Saha 2020 年 3 月 11 日
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);
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 2020 年 3 月 11 日
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);
t = fgetl(fid);


Community Treasure Hunt

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

Start Hunting!

Translated by