我有一个包含0和1随机数的文本文件,我想在Matlab中读取它,并获得数组中的每个元素
目标:我有两个文本文件,我想比较一下,看看它们是否相同,以及有多大区别,事实上,这两个文件是:1( 我通过通信线路发送的原始文件2( 接收到的文件应该与发送文件相同
我的代码示例:
for i=1:1:size
if (send[i] ~= received[i]) error++;
end
但我需要知道如何从文本文件中获得这两个数组;0";以及";1〃;在一行中
由于您想检查两个文件的内容是否相同,我认为您不需要担心它们内容的格式或0和1的顺序,它们应该完全相同。您可以使用以下代码读取整个文本文件,并将其存储在char
矢量中:
C = char(join(readlines(filename), ''));
要比较两个文件的内容并找到错误百分比,您可以执行以下操作:
act = char(join(readlines(actualfilename), ''));
exp = char(join(readlines(expectedfilename), ''));
err = (sum(act~=exp))/length(act);
但您也应该检测两个文件是否包含不同数量的字符:
act = char(join(readlines(actualfilename), ''));
exp = char(join(readlines(expectedfilename), ''));
al = length(act); % actual length
el = length(exp); % expected length
dl = abs(al-el);
if (dl>0)
ml = min(al, el); % min length
act = act(1:ml); % shorten act if needed
exp = exp(1:ml); % shorten exp if needed
end
err = (sum(act~=exp)+dl)/al % error
请注意,在第二种情况下,如果在文件中间添加或丢失了一个字符,则所有后续字符都将被视为错误。
读取文本文件:
如果文本文件配置有空格或换行符:
Text.txt(换行(
0
1
0
1
1
Text.txt(空格(
1 0 1 0 1 1
可以使用格式规范为%d
的fscanf()
函数对数据进行扫描,以整数形式扫描文件。
File_Name = "Text.txt";
File_ID = fopen(File_Name);
Binary = fscanf(File_ID,'%d');
如果文本文件的字符旁边/连接在同一行,且没有空格:
Text.txt(单行,无空格(
01011
扫描文本文件可以使用格式规范,%s
指示以字符串形式读取文件。可以使用split()
、cell2mat()
和str2num()
将该字符串拆分并转换为数组。
split()
→将字符串拆分为具有单个位/二进制的单元格数组cell2mat()
→将单元格数组转换为字符数组str2num()
→将字符数组转换为数字双数组
File_Name = "Text.txt";
File_ID = fopen(File_Name);
Binary = fscanf(File_ID,'%s');
Binary = split(Binary,'');
Binary = str2num(cell2mat(Binary(2:end-1))).';
比较评估错误数量:
错误检查可以通过以元素方式对数组进行逻辑比较来完成。然后通过使用nnz()
(非零数(函数,我们可以计算条件为真的次数;1〃;。这里的条件是当两个二进制信号CCD_ 12和CCD_。
代码段:
Error = nnz(Binary_1 ~= Binary_2);
Error
完整脚本选项1(换行符/空格文本文件(:
File_Name = "Text_1.txt";
File_ID = fopen(File_Name);
Binary_1 = fscanf(File_ID,'%d');
fclose(File_ID);
File_Name = "Text_2.txt";
File_ID = fopen(File_Name);
Binary_2 = fscanf(File_ID,'%d');
fclose(File_ID);
clearvars -except Binary_1 Binary_2
Error = nnz(Binary_1 ~= Binary_2);
Error
完整脚本选项2(单行,无空格文本文件(:
File_Name = "Text_1.txt";
File_ID = fopen(File_Name);
Binary_1 = fscanf(File_ID,'%s');
Binary_1 = split(Binary_1,'');
Binary_1 = str2num(cell2mat(Binary_1(2:end-1))).';
File_Name = "Text_2.txt";
File_ID = fopen(File_Name);
Binary_2 = fscanf(File_ID,'%s');
Binary_2 = split(Binary_2,'');
Binary_2 = str2num(cell2mat(Binary_2(2:end-1))).';
fclose(File_ID);
clearvars -except Binary_1 Binary_2
Error = nnz(Binary_1 ~= Binary_2);
Error
使用MATLAB R2019b运行