我有一个任务要做我的硕士论文,我真的需要你的帮助,因为我被困住了,如果不这样做我就无法进行统计工作。
要做的第一件事就是找出一系列数百个数字中特定序列的8个数字的次数。您可以在下面找到DL以查看日志文件的外观。您只需阅读“代码”列。真正的顺序可以是“44 22 33 21”,“13 43 43 21”或“14 34 14 32”,具体取决于日志文件(因此只有4个数字)。
为此,我的朋友找到了脚本并且工作正常:
close all;
[FileName,PathName]=uigetfile('*.log','Select File');
startRow=input('Which line does the data start at?');
addpath(PathName);
BLOC_1 = Import_Sequence(FileName,startRow,inf);
sequence = [4;4;2;2;3;3;2;1];
n = 0;
vrai = 0;
ii = 1;
jj = 8;
Taille = size(BLOC_1);
Fin = Taille(1);
Taillesequence = size(sequence);
Blocksequence = Taillesequence(1);
Limite = Fin-Blocksequence;
while n < Limite
morceau = BLOC_1(ii:jj);
tf = isequal(morceau,sequence);
if tf == 1
vrai=vrai+1;
n=n+1;
ii=ii+1;
jj=jj+1;
else
n=n+1;
ii=ii+1;
jj=jj+1;
end
end
vrai
确实有效,但我需要额外的信息。在日志文件中,“Code”列由一系列数字分隔2次≠“1”,“2”,“3”,“4”,因此它将文件拆分为3个块/部分。 / p>
问题在于:上面的脚本为我提供了整个文件的真实序列数,但我想要的是每个块的真实序列数 。这就是我需要你帮助的地方。如何找到每个块的真实序列数,以便有3个值?是否可以为此创建适当的脚本?
日志文件的示例是here。
答案 0 :(得分:0)
如果您需要它来为每个块工作,您可以找到包含块信息的行号并对每个块执行操作,
fid = fopen('path\to\log\file\file.log');
line = 0;
lineNumbersWithBLOC = [];
while ~feof(fid)
tLine = fgetl(fid);
line = line + 1;
if ~isempty(strfind(tLine, 'BLOC_'))
lineNumbersWithBLOC = cat(1, lineNumbersWithBLOC, line);
end
end
fclose(fid);
获得包含BLOC_
的行号后,您可以运行工作代码来查找模式。