2017-05-16 9 views
-1

私は私の修士論文のためにやるべき仕事を持っており、本当に助けが必要です。ログファイル内に多数の真の/特定のシーケンスを探す

最初に行うべきことは、数百の一連の数字の中に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"が一連の数字≠ "1"、 "2"、 "3"、 "4"で2回区切られているので、ファイルを3ブロック/パーツに分割します。ここで

が問題である:上記のスクリプトは、ファイル全体のために私の本当のシーケンスの数を与えるが、私が欲しいのは各ブロックための真のシーケンスの数です。そして、私はあなたの助けが必要です。 3つの値を持つために各ブロックの真のシーケンスの数を見つける方法は?それはそれのための適切なスクリプトを作成することは可能ですか?

ログファイルの例はhereです。

+0

これまでにこの質問をしていませんでしたか? – beaker

+0

はい、それは間違いでいっぱいでした。だから私は新しいものを作りました、完全に異なっています。 – Baronnet

答えて

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_が含まれている行番号を持っていたら、あなたができます作業コードを実行してパターンを見つけます。

+0

お返事ありがとうございます! 私が理解していれば、作成したばかりのスクリプトは、各ブロックの真のシーケンスを分析するためにその行を見つけるでしょう。 それをスクリプトに含めるにはどうすればいいですか? 3つの値を持つために、各ブロックの真のシーケンスの数を見つけるでしょうか? – Baronnet

+0

誰も助けることができますか? :/ – Baronnet

+0

@Baronnet、私は以下のようにします: 1.各行を処理します 2. 'strsplit'を使って行を分割します。各行に列値のセル配列を返します。 3.列のレコードを保持しますあなたはパターンに興味を持ち、パターンを探します。 4.(上記の 'strfind'を使って)' BLOC_'のインスタンスを見つけたら、あなたはブロックの終わりに達していることを知っています。 希望に役立ちます。 – kedarps

関連する問題