Azzera filtri
Azzera filtri

How to read text file and put it in to a matrix format.

4 visualizzazioni (ultimi 30 giorni)
My input file input.txt has the following inputs.
input.txt=
a b c d f
a c
a c d f g
a b e h
a c e f
I want input file converted into a matrix format ie.,
input=
[a b c d f
a c 0 0 0
a c d f g
a b e h 0
a c e f 0];
how will do this.
thanks.

Risposta accettata

Azzi Abdelmalek
Azzi Abdelmalek il 9 Nov 2012
fid = fopen('file1.txt');
line1 = fgetl(fid);
res=line1;
while ischar(line1)
line1 = fgetl(fid);
res =char(res,line1)
end
fclose(fid);
  1 Commento
Azzi Abdelmalek
Azzi Abdelmalek il 9 Nov 2012
To add 0
[n,m]=size(res)
for k1=1:2:n
for k2=1:2:m
if isequal(res(k1,k2),' ')
res(k1,k2)='0'
end
end
end

Accedi per commentare.

Più risposte (2)

David Barry
David Barry il 9 Nov 2012
You should try looking up the functions textread and textscan if you want to do this programatically. Alternatively you can use the data import wizard GUI.

Andrei Bobrov
Andrei Bobrov il 9 Nov 2012
Modificato: Andrei Bobrov il 9 Nov 2012
f = fopen('test.txt'); c = textscan(f,'%s','Delimiter','\n');fclose(f);
c2 = c{1}(~cellfun(@isempty,c{1}))
c3 = regexp(c2,'\w*','match')
n = cellfun('size',c3,2);
m = max(n);
c4 = arrayfun(@(x,y)[c3{x},repmat({0},1,mod(-y,m))],(1:numel(n))',n(:),'un',0);
test = cat(1,c4{:});
or
fid = fopen('test.txt');
C = textscan(fid, '%s %s %s %s %s');
fclose(fid);
n = cellfun(@numel,C);
m = max(n);
C1 = cellfun(@(x,y)[x;repmat({'0'},mod(-y,m),1)],C,num2cell(n),'un',0)
Cout = [C1{:}]
Cout(cellfun(@isempty,Cout)) = {'0'}

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by