2012-04-13 6 views
1

を数える:はラインでMATLABの行のテキストファイルを読んで、私はこのようなテキストファイルを持っている

v -0.874157 -0.291386 0.388514 
v -0.854358 -0.0854358 -0.512615 
v 0.57735 0.57735 -0.57735 
v -0.646997 -0.539164 -0.539164 
v -0.688247 -0.229416 -0.688247 
v 0.105409 0.527046 -0.843274 
v -0.442326 0.884652 0.147442 
v -0.574696 -0.766261 0.287348 
v 0.163846 -0.655386 -0.737309 
v 0.536656 0.715542 0.447214 
f 4 1 2 
f 4 2 5 
f 9 4 5 
f 1 4 8 
f 4 9 8 
f 10 1 8 
f 9 10 8 
f 10 9 3 
f 3 9 6 
f 5 2 6 
f 9 5 6 
f 1 10 7 
f 2 1 7 
f 3 6 7 
f 10 3 7 
f 6 2 7 

私はMathWorks社のMATLABでこのテキストファイルをインポートしたかったし、その後、私の出力をfとVの数がために、言いますこのファイルの例私はv = 10の数とf = 16の数を持っていますが、書き込もうとしましたができませんでした。私はそれがとてもシンプルであることを知っています。

function [vnum, fnum]=read(varargin) 
filename=varargin{1}; 
fid=fopen(filename, 'rt'); 
% this is error message for reading the file 
if fid == -1 
    error('File could not be opened, check name or path.') 
end 
% 
tline = fgetl(fid); 
while ischar(tline) 
    % reads a line of data from file. 
    vnum = sscanf(tline, 'v %f %f %f'); 
    fnum=sscanf(tline, 'f %d %d %d'); 
    tline = fgetl(fid); 
end 
    vertex=length(strfind(vnum,'v')); 
    face=length(strfind(fnum,'f')); 
fclose(fid); 

答えて

2

は基本的に何が起こっているのか、あなたのvnumとFNUM値はオフに保存されていないです。

は、ここに私の間違ったコードです。私は下に示しているように、それらをある種の配列に格納する必要があります。

function [vnum, fnum]=read(varargin) 
filename=varargin{1}; 
fid=fopen(filename, 'rt'); 
% this is error message for reading the file 
if fid == -1 
    error('File could not be opened, check name or path.') 
end 
% 
tline = fgetl(fid); 

MAX_NUM_VALUES=100; 
vnum=zeros(MAX_NUM_VALUES,3); 
fnum=zeros(MAX_NUM_VALUES,3); 
vnum_index=0; 
fnum_index=0; 

while ischar(tline) 
    % reads a line of data from file. 
    if tline[1]=='v' 
    vnum_index=vnum_index+1; 
    vnum(vnum_index,:) = sscanf(tline, 'v %f %f %f'); 
    elseif tline[1]=='f' 
    fnum_index=fnum_index+1; 
    fnum(fnum_index,:)=sscanf(tline, 'f %d %d %d'); 
    end 
    tline = fgetl(fid); 
end 
vnum=vnum(1:vnum_index); 
fnum=fnum(1:fnum_index); 
fclose(fid); 
関連する問題