如何让MATLAB自己连续的读取文本文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让MATLAB自己连续的读取文本文件相关的知识,希望对你有一定的参考价值。

方法1:
把文件的文件名按一定的规律命名,假如:filename1.txt,filename2.txt,...,fielname100.txt,在读取的时候则可以使用循环:
for i = 1:100
fileName = ['filename' num2str(i) '.txt'];
x = load(filiName);
end
方法2:无需对数据文件的文件名进行修改,就是文件名无须有规律:
A = dir(fullfile('d:/datafile','*.txt'));
这个语句是把存放数据文件的目录d:/datafile下的所有txt文件列出来,并把这些文件名的信息存放到一个变量A中,A是一个结构体变量,只要对A进行循环就可以读取到所有文件的数据了。
参考技术A for ii=1:1:20
aa=load(['文件名',num2str(ii),'.out']);%循环读取文件
b=aa(2:3,2:2);%提取第2-3行,第2列的数据
end
亲测可用

如何从 MATLAB 的 audioread 等 libsndfile 库中读取数组格式的音频文件

【中文标题】如何从 MATLAB 的 audioread 等 libsndfile 库中读取数组格式的音频文件【英文标题】:How to read an audio file in an array format from libsndfile library like MATLAB's audioread 【发布时间】:2016-03-07 23:55:42 【问题描述】:

我正在使用 libsndfile 来读取 .caf 文件。我能够使用音频文件中的项目数正确读取文件。但是,当我将这些数字保存在文本文件中并尝试使用 MATLAB 验证我的值时,它们看起来有很大不同。我附上了 C++ 中的代码以及从 C++ 和 MATLAB 获得的值。

void ofApp::setup()


const char* fn = "/Users/faiyadhshahid/Desktop/Desktopdemo.caf";

SNDFILE *sf;
SF_INFO info;
int num_channels, num, num_items, *buf, f, sr,c, i , j;
FILE *out;

/* Open the WAV file. */
info.format = 0;
sf = sf_open(fn,SFM_READ,&info);
if (sf == NULL)

    printf("Failed to open the file.\n");


/* Print some of the info, and figure out how much data to read. */
f = info.frames;
sr = info.samplerate;
c = info.channels;
printf("frames=%d\n",f);
printf("samplerate=%d\n",sr);
printf("channels=%d\n",c);
num_items = f*c;
printf("num_items=%d\n",num_items);

/* Allocate space for the data to be read, then read it. */
buf = (int *) malloc(num_items*sizeof(int));
num = sf_read_int(sf,buf,num_items);
sf_close(sf);
printf("Read %d items\n",num);
/* Write the data to filedata.out. */
out = fopen("/Users/faiyadhshahid/Desktop/filedata.txt","w");
for (i = 0; i < num; i += c)

    for (j = 0; j < c; ++j)
        fprintf(out,"%d ",buf[i+j]);
    fprintf(out,"\n");

fclose(out);
return 0;

Values of C++ (on left) vs MATLAB (on right):

【问题讨论】:

请注意在 matlab 中您的数字非常小。 0.00021.... 不可能是int,那么为什么要与int 比较呢?看起来您还有一些工作要做,以便将两个数据集放入相同的单元中。 【参考方案1】:

我自己想出来的。我在比较苹果和橙子。 我需要做的更改是将保存值的缓冲区转换为读取浮点值。 `int num_channels,num,num_items,f,sr,c,i,j; 浮动 *buf; 文件 *out;

/* Open the WAV file. */
info.format = 0;
sf = sf_open(fn,SFM_READ,&info);
if (sf == NULL)

    printf("Failed to open the file.\n");


/* Print some of the info, and figure out how much data to read. */
f = info.frames;
sr = info.samplerate;
c = info.channels;
printf("frames=%d\n",f);
printf("samplerate=%d\n",sr);
printf("channels=%d\n",c);
num_items = f*c;
printf("num_items=%d\n",num_items);

/* Allocate space for the data to be read, then read it. */
buf = (float *) malloc(num_items*sizeof(float));
num = sf_read_float(sf,buf,num_items);
sf_close(sf);
printf("Read %d items\n",num);
/* Write the data to filedata.out. */
out = fopen("/Users/faiyadhshahid/Desktop/filedata.txt","w");
for (i = 0; i < num; i += c)

    for (j = 0; j < c; ++j)
         fprintf(out,"%f \n",buf[i]);
            // fprintf(out,"\n");

fclose(out);

`

【讨论】:

得说这比我预期的要简单。我想这更像是读入,然后应用 y=mx+b

以上是关于如何让MATLAB自己连续的读取文本文件的主要内容,如果未能解决你的问题,请参考以下文章

matlab如何读取多个文本文件

如何在 MATLAB 中读取包含数字的文本文件?

如何使用matlab将文本文件中的读取值正确读取到矩阵中

MATLAB;如何从头文件(文本文件)中提取信息

我初学matlab,现在需要完成用MATLAB读取TXT文本数据存于结构体,文本数据以逗号作为分隔。

MATLAB应用实战系列(五十一)-TXT数据的读取完美教程