Matlab:对多个文件起作用

Posted

技术标签:

【中文标题】Matlab:对多个文件起作用【英文标题】:Matlab: function on multiple files 【发布时间】:2018-12-17 14:45:15 【问题描述】:

我想读取文件夹中包含的所有 wav 文件,每个文件我执行一个功能。 此函数的结果是一个数字。我想将几个结果保存在一个文件 txt 中。

这是我的代码:

dirMask = 'folder\*.wav';  
wavRoot = fileparts(dirMask);

Files=dir(dirMask);

x = []; 

for k=1:length(Files)
    FileNames = fullfile(wavRoot, Files(k).name)
    nomi=FileNames;
    [s,fs] = audioread(FileNames);

 a = function(s, fs);

    x=a; 

end

fid = fopen('file.txt','wt');
fprintf(fid,'%f\n',x);
fclose(fid);

此代码不起作用。我该怎么做?

【问题讨论】:

代码“不起作用”,因为... 不保存所有结果,只保存最后四个 您所做的只是在每个循环中更改x 的值,然后在最后写入最终值。我很惊讶它写的是最后 4 个而不是最后一个 1。您需要 1. 使用 x(end+1) = a 更新每个循环 x(有更好的方法可以做到这一点,但无论如何)。您可能需要更改使用 fprintf 的方式。 2. 在循环前使用fopen,完全跳过使用x,在循环内使用fprintf(fid,'%f\n',a)。旁注:我假设您实际上并没有使用 function 作为函数名?这是语法错误。 【参考方案1】:

我重新安排了一些事情。我对最初的意图并不完全肯定,但我认为这就是你想要实现的目标:

dirMask = 'folder\*.wav';  
Files = dir(dirMask);
fid = fopen('file.txt','wt');

for k=1:length(Files)
   FileName = [ Files(k).folder '\' Files(k).name ]

   [s,fs] = audioread(FileName);

   % functions named function is a bad idea as it is keyword protected
   x = myFunction(s,fs);
   fprintf(fid,'%f\n',x);

end

fclose(fid);

【讨论】:

以上是关于Matlab:对多个文件起作用的主要内容,如果未能解决你的问题,请参考以下文章

Matlab 计时器在独立应用程序中不起作用

MATLAB:保存命令不起作用

for循环在matlab中不起作用

独立的matlab exe不起作用

在Matlab中打开多个文件

为啥以下操作在 Matlab 中不起作用