
用matlab编程,在一大堆十六进制数中,寻找特定的数据,遇到特定数据是输出下面的,再遇下一个换行输出
初始数据如:4127FFD2B1FFAAB1095C···6303FFAAB10A6472···03E45CFFAAB10B···很多数据。寻找FFAAB1为开头的数据,...
初始数据如:41 27 FF D2 B1 FF AA B1 09 5C ··· 63 03 FF AA B1 0A 64 72 ··· 03 E4 5C FF AA B1 0B ···很多数据。
寻找FF AA B1为开头的数据,输出此数据及后面的数据,遇到下一个FF AA B1 之前换行,再输出。
输出结果图。用matlab编程实现。
求高手,谢谢了。
有什么问题可以问我。 展开
寻找FF AA B1为开头的数据,输出此数据及后面的数据,遇到下一个FF AA B1 之前换行,再输出。
输出结果图。用matlab编程实现。
求高手,谢谢了。
有什么问题可以问我。 展开
3个回答
展开全部
假设Zone1.txt数据如下
02 06 2E FF AA B1 09 37 84 60 FF AA FF AA B1 2E 33 86 FF AA B1 FF AA B1 7B 2A 8D FF AA B1 7B 3F 24 FF AA B1 8C 47 84 60 FF AA B1 38 0C 86 FF FF AA B1 B2 B3 B4 FF AA B1 11 22
f=fopen('Zone1.txt');
A=char(fread(f,'char'))';%A即是文本文件中的内容
fclose(f);
B=regexp(A,'\<FF\s+AA\s+B1.*?(?=FF\s+AA\s+B1)','match')%B即提取了所要的内容
char(B)%显示结果如下
ans =
FF AA B1 09 37 84 60 FF AA
FF AA B1 2E 33 86
FF AA B1
FF AA B1 7B 2A 8D
FF AA B1 7B 3F 24
FF AA B1 8C 47 84 60
FF AA B1 38 0C 86 FF
FF AA B1 B2 B3 B4
02 06 2E FF AA B1 09 37 84 60 FF AA FF AA B1 2E 33 86 FF AA B1 FF AA B1 7B 2A 8D FF AA B1 7B 3F 24 FF AA B1 8C 47 84 60 FF AA B1 38 0C 86 FF FF AA B1 B2 B3 B4 FF AA B1 11 22
f=fopen('Zone1.txt');
A=char(fread(f,'char'))';%A即是文本文件中的内容
fclose(f);
B=regexp(A,'\<FF\s+AA\s+B1.*?(?=FF\s+AA\s+B1)','match')%B即提取了所要的内容
char(B)%显示结果如下
ans =
FF AA B1 09 37 84 60 FF AA
FF AA B1 2E 33 86
FF AA B1
FF AA B1 7B 2A 8D
FF AA B1 7B 3F 24
FF AA B1 8C 47 84 60
FF AA B1 38 0C 86 FF
FF AA B1 B2 B3 B4
追问
由于数据量很大。输出结果怎么直接保存到txt文本中,谢啦
追答
加一句
dlmwrite('zone2.txt',char(B),'')
名字自己改即可
____________________________________________
关于最后一个FF AA B1 11 22没有的问题,这是因为正则表达式是要找FF AA B1前的内容,但因为这里已经到了文档最后了,没有FF AA B1结尾,所以就没有提取出来。可以如下改进
f=fopen('Zone1.txt');
A=strcat(char(fread(f,'char'))',' FF AA B1');%在最后加上特征内容
fclose(f);
B=regexp(A,'\<FF\s+AA\s+B1.*?(?=FF\s+AA\s+B1)','match')%B即提取了所要的内容
char(B)%显示结果如下
展开全部
假设Zone1.txt数据如下
02 06 2E FF AA B1 09 37 84 60 FF AA FF AA B1 2E 33 86 FF AA B1 FF AA B1 7B 2A 8D FF AA B1 7B 3F 24 FF AA B1 8C 47 84 60 FF AA B1 38 0C 86 FF FF AA B1 B2 B3 B4 FF AA B1 11 22
f=fopen('Zone1.txt');
A=char(fread(f,'char'))';%A即是文本文件中的内容
fclose(f);
B=regexp(A,'\<FF\s+AA\s+B1.*?(?=FF\s+AA\s+B1)','match')%B即提取了所要的内容
C=char(B)%显示结果如下
f=fopen('Zone1.txt');
fwrite(f,C)
fclose(f);
02 06 2E FF AA B1 09 37 84 60 FF AA FF AA B1 2E 33 86 FF AA B1 FF AA B1 7B 2A 8D FF AA B1 7B 3F 24 FF AA B1 8C 47 84 60 FF AA B1 38 0C 86 FF FF AA B1 B2 B3 B4 FF AA B1 11 22
f=fopen('Zone1.txt');
A=char(fread(f,'char'))';%A即是文本文件中的内容
fclose(f);
B=regexp(A,'\<FF\s+AA\s+B1.*?(?=FF\s+AA\s+B1)','match')%B即提取了所要的内容
C=char(B)%显示结果如下
f=fopen('Zone1.txt');
fwrite(f,C)
fclose(f);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
若不是自己感兴趣,绝对不会为了这50分编这样一个小时(在下能力有限)。
测试结果如下:
output =
'09 5C 63 03 FF AA B1 '
'0A 64 72 03 E4 5C FF AA B1 '
'0B '
clc
clear
a='41 27 FF D2 B1 FF AA B1 09 5C 63 03 FF AA B1 0A 64 72 03 E4 5C FF AA B1 0B';
a=[a ' '];
b=length(a)/3;
A=reshape(a,3,b);
time=0;
flag=0;
outputenable=0;
k=1;
for N=1:b
if flag==3
outputenable=1;
end
if outputenable==1;
if time==0
output{k,1}=a([3*N-2:3*N]);
time=1;
else
output{k,1}=[output{k,1} a([3*N-2:3*N])];
end
end
switch A([1:2],N)
case ['F';'F']
flag=1;
case ['A';'A']
if flag==1
flag=2;
else flag=0;
end
case ['B';'1']
if flag==2
flag=3;
else flag=0;
end
otherwise flag=0;
end
if flag==3
if outputenable==1
k=k+1;
output{k,1}=[];
end
end
end
output
测试结果如下:
output =
'09 5C 63 03 FF AA B1 '
'0A 64 72 03 E4 5C FF AA B1 '
'0B '
clc
clear
a='41 27 FF D2 B1 FF AA B1 09 5C 63 03 FF AA B1 0A 64 72 03 E4 5C FF AA B1 0B';
a=[a ' '];
b=length(a)/3;
A=reshape(a,3,b);
time=0;
flag=0;
outputenable=0;
k=1;
for N=1:b
if flag==3
outputenable=1;
end
if outputenable==1;
if time==0
output{k,1}=a([3*N-2:3*N]);
time=1;
else
output{k,1}=[output{k,1} a([3*N-2:3*N])];
end
end
switch A([1:2],N)
case ['F';'F']
flag=1;
case ['A';'A']
if flag==1
flag=2;
else flag=0;
end
case ['B';'1']
if flag==2
flag=3;
else flag=0;
end
otherwise flag=0;
end
if flag==3
if outputenable==1
k=k+1;
output{k,1}=[];
end
end
end
output
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询