在日志文件中查找许多真/特定序列

时间:2017-05-16 19:47:33

标签: matlab logging sequence

我有一个任务要做我的硕士论文,我真的需要你的帮助,因为我被困住了,如果不这样做我就无法进行统计工作。

要做的第一件事就是找出一系列数百个数字中特定序列的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

1 个答案:

答案 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_的行号后,您可以运行工作代码来查找模式。