Read Multiple Entries from Text File

May i know how can i import multiple entries such as this:
32*0 0.237024 0.248206 39*0 0.217874 0.160635
0.193782 0.242259 0.281551 37*0 0.168798 0.178275
As for the first input, i want to create 32 separate inputs of zeros. Thank you.

 Respuesta aceptada

Mathieu NOE
Mathieu NOE el 16 de Mzo. de 2021
so this is the code , maybe there is still room for improvement , but I tested it ok vs the data file provided
hope it helps
clc
clearvars
Filename = 'data.txt'
output = extract_data(Filename); % cell array
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function output = extract_data(Filename)
fid = fopen(Filename);
tline = fgetl(fid);
k = 0;
while ischar(tline)
k = k+1;
% find position where the zero product appear in each line
if contains(lower(tline),'*0') % lower make matlab not case sensitive
ind_asterix = strfind(lower(tline),'*0')
for ci = 1:length(ind_asterix)
ind_start = max(1,ind_asterix(ci)-5);
ind_stop = ind_asterix(ci)-1;
nb_of_zeros(ci) = str2num(tline(1,ind_start:ind_stop));
end
% let's split each line in individual scalars and replace the zero
% with new vector
tline_num = str2num(tline);
q = 0;
line_all = [];
for ci = 1:length(tline_num)
tline_extract = tline_num(1,ci);
if tline_extract == 0
q = q+1;
str = num2str(zeros(1,nb_of_zeros(q)));
else
str = num2str(tline_extract);
end
% concat all segements together
line_all = [line_all, ' ', str];
end
else
line_all = tline;
end
% output{k} = line_all; % array of char
output{k} = str2num(line_all); % numerical (vector)
tline = fgetl(fid);
end
fclose(fid);
end

2 comentarios

Jey Ganasan
Jey Ganasan el 17 de Mzo. de 2021
thank you very much, i modified it to get my desired output. It's working.
Mathieu NOE
Mathieu NOE el 17 de Mzo. de 2021
Glad it helped

Iniciar sesión para comentar.

Más respuestas (1)

Mathieu NOE
Mathieu NOE el 16 de Mzo. de 2021
hello
you can concatenate datas and vectors of zeros like that :
a = [zeros(1,32) 0.237024 0.248206 zeros(1,39) 0.217874 0.160635];
b = [0.193782 0.242259 0.281551 zeros(1,37) 0.168798 0.178275];

3 comentarios

Jey Ganasan
Jey Ganasan el 16 de Mzo. de 2021
hello there,
thank you but I'm trying to import these values into table, there are 9300 lines of random numbers, such as this
2*0 0.237024 0.248206 39*0 0.217874 0.160635
0.193782 0.242259 0.281551 37*0 0.168798 0.178275
0.156088 0.19499 0.232122 0.222636 0.295423 18*0
0.224133 0.245725 0.331081 0.387437 13*0 0.147574
0.212953 0.1945 0.171819 0.19408 0.242008 0.237876
0.292011 17*0 0.226117 0.256962 0.238144 0.451803
0.300003 12*0 0.162104 0.0541259 0.145507 0.168693
0.178204 0.207441 0.213339 0.319337 0.301409 0.304104
14*0 0.236128 0.2363 0.253809 0.303041 0.242415
0.438212 0.304733 0.248699 10*0 0.209468 0.147598
0.111917 0.131427 0.136847 0.152239 0.189117 0.231847
Mathieu NOE
Mathieu NOE el 16 de Mzo. de 2021
ok
so you have a text file , and each line must be converted to a numerical vector , with , for example " 10*0 " converted into zeros (1,10) ? am I right ?
Jey Ganasan
Jey Ganasan el 16 de Mzo. de 2021
Yes.

Iniciar sesión para comentar.

Categorías

Preguntada:

el 16 de Mzo. de 2021

Comentada:

el 17 de Mzo. de 2021

Community Treasure Hunt

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

Start Hunting!

Translated by