2017-05-29 33 views
0

配列の要素をファイルtxtにコピーしたい。私は配列aのwavファイルの最初の50サンプルを読んで、ファイルtxtにコピーしたいと思います。これは私のコードです:Matlab:ファイルtxtに配列をコピー

[s,fs]=wavread('file.wav'); 
for k=1:50 
    a=s(k) 
end 

fid = fopen('file.txt','wt'); 

fprintf(fid,'%f\n',a); 
fclose(fid); 

ファイルtxtのこのコードでは、すべてのサンプルではなく、最後の要素のみがあります。

+0

は、 '=秒(1時50分)でループを交換してください;' –

+0

あなたは一つだけ*** ***時間fprintf' '呼び出すためだこと、およびコードのその時点で、「a」コンティアンは最後のサンプルです。 – beaker

答えて

3

fprintfは、ベクトル入力を処理できます。だから、単にa = s(1:50);によりループを置き換えることができます。

[s,fs]=wavread('file.wav'); 
a = s(1:50); 
fid = fopen('file.txt','wt'); 
fprintf(fid,'%f\n',a); 
fclose(fid); 
-2

ループ内のファイルを開いたり閉じたりしないでください。ループ外でファイルを開きます。ループに書き込む。最後に一度ファイルを閉じます。ファイルを開くたびにファイルの先頭に移動します!

+1

コードはループ内のファイルを開いたり閉じたりしません。投稿の編集履歴を確認しました。残念ながら、これは、あなたの答えで行われたアサーションが間違っていることを意味します。実際に起こっているのは、 'fprintf'がデータの最後のサンプルでのみ呼び出されるため、オーディオファイルの最後のサンプルだけがファイルに書き込まれるということです。ところで、必ず 'fopen'を** **データを追加するために使うことができます。つまり、必ずしもファイルの先頭に行くわけではありません。 ''a 'フラグを使用してください:https://www.mathworks.com/help/matlab/ref/fopen.html#input_argument_d0e304282。 – rayryeng

関連する問題