2017-05-22 6 views
1

を使用してtxtファイルに印刷0 Iが入力 「NULL」の代わりに、Matlabの

このよう
head1  head2  head3  head3 

0.004 5.104175 -1.651492 0.074480 
0.015 5.104175 -1.327670 0.087433 
0.025 5.104175 -1.181950 0.093910 
... 

ファイル.txtファイルと私は同じファイル内のすべての次の行に最初の行を減算する、ことを有します、このような.txtファイルに印刷されています。ここ

0  0   0   0 
0.011 0 -0.323825 -0.012953 
... 

することは私のコードは次のとおりです。

for i = 1:length(x) %read all the files contained in folder_inp 

    %%check file extensions 
    [pathstr,name,ext] = fileparts(x(i).name); 
    %%if it is a text file... 
    if strcmp('.txt',ext) 
     s = importdata(strcat(folder_inp,'\',x(i).name)); 
     init = s.data(1,:); 
     for k=1:length(s.data) 
      if s.data(k,:) == init 
       s.data(k,:) = zeros(1,length(s.data(k,:))); 
      else 
       s.data(k,:) = s.data(k,:)-init; 
      end 
     end 

     fid = fopen(strcat(folder_out,'\',name,'.txt'), 'w'); 
     formatSpecs = '%20s %20s %20s %20s \r'; 
     for j = 1:length(s.data) 
      if j == 1 
       fprintf(fid,formatSpecs,'head1','head2','head3','head4'); 
      elseif j==2 
       fprintf(fid,'\n') ; 
      else 
       fprintf(fid,formatSpecs,s.data(j,1),s.data(j,2),s.data(j,3),s.data(j,4)); 
      end 
     end 

     fclose(fid); 

    end 

end 

everithingは事実番目のexept、正常に動作します0ではなく、コードはヌル文字を出力します。助言がありますか?

+0

入力ファイルのシンボルa、b、cなどは何を表していますか?あなたは実際に数字を減算していると思いますか?入力ファイルの実際の例を投稿できますか? – Dennis

+0

はい。私は質問 – drSlump

答えて

1

fprintfへの電話で、format specifiersが間違っているという問題があります。あなたは変換文字%sを使用しています。これは入力引数を文字列として解釈します。データは実際には数値なので、MATLABはまずそれらを文字列に変換しようとします。浮動小数点値の場合、これはうまくいくようですが、整数値はASCIIコードとして解釈され、ASCIIコードに変換されます。 %sを使用して、この例に注意してください。piため

>> sprintf('%s ', [pi 0 65 66 67 pi]) 

ans = 

3.141593e+00 ABC 3.141593e+00 

値は適切な文字列に変換されますが、0 65 66 67はNULL文字プラスABCに変換されます。

あなたは代わりに、このような%fなどの数値のためのフォーマット指定子を使用する必要があります。

>> sprintf('%f ', [pi 0 65 66 67 pi]) 

ans = 

3.141593 0.000000 65.000000 66.000000 67.000000 3.141593 
1

%fの使用に加えて、あなたの問題を解決するであろう、また、コードをクリーンアップするには、以下のような何かを行うことができますし、任意の数の列と任意のヘッダーテキストに対して機能させる。

% getting the headers 
oldFile = fopen('text_in.txt'); 
headers = fgets(oldFile); 
fclose(oldFile); 

% reading and manipulating the data 
data = dlmread('test.txt', '\t', 1, 0); % skip the first row of headers 
data = repmat(data(1,:), size(data, 1), 1) - data; % subtract first row 

% the format spec 
formatspec = [repmat('%f ',1 , size(data, 2)) '\r\n']; 

% writing to the new file 
fid = fopen('text_out.txt', 'w'); 
fprintf(fid,'%s',headers); % the header 
fprintf(fid, formatspec, data'); % the data 
fclose(fid); 
+0

を編集しました。これは私のコードをもっとリーンにしました – drSlump

関連する問題