2016-05-23 52 views
0

私は非常に基本的な質問があります。私はMatlabのファイルを読み込んでいて、「occurence1」という行があることを検出したいと思っています。しかし、私はマトリックスディメンションエラーを取得しています。私はいくつかの行にMatlab数の行列として読み取ると思いますか?Matlabのファイルから1行ずつ読み込んだ文字列を比較する

私のデータは次のようになります。

String2 
occurence1 
3.2 1.2 
string3 
occurence1 

が、私は文字列または何かにTLINEをキャストする必要がありますか?私はよくJavaで精通していますが、私は、変数のMATLABの非定義といくつかの問題を持っている...

%open file with patterns 
fid = fopen('filename.txt'); 

tline = fgetl(fid); 

disp(tline); 
while ischar(tline) 
    disp(tline) 
    tline = fgetl(fid); 


    if (num2str(tline)=='occurence1') 

     disp(tline) 
    end 


end 

fclose(fid); 
+1

['fgetl'](http://www.mathworks.com/help/matlab/ref/fgetl.html)の戻り値はすでにテキスト文字列であるため、' num2str'呼び出しは無意味です。また、文字列を比較するには、['strcmp'](http://www.mathworks.com/help/matlab/ref/strcmp.html)のような文字列関数を使用します。 – excaza

+1

また、一般的な問題として、「実際にエラーが発生しました」というより、実際のエラーメッセージとスタックトレースを提供する方がはるかに便利です – excaza

+1

また、現在の実装では、あなたのファイル。 – excaza

答えて

1

エディタでM-Lintのメッセージが説明するように:

コードは、2つの文字列を比較し、 (==)と等しいか、または (~=)の関係演算子に等しいかのいずれかを使用します。比較される文字列の長さが異なる場合、MATLABソフトウェアは実行時にエラー を返します。 コード実行時にMATLABがエラーを返さない場合でも、 このコードは非効率です。

MATLABの==戻りABが等しい論理アレイ。ドキュメントごとに、==への入力は、スカラー(他の配列と同じサイズに展開されているもの)でない限り、同じサイズでなければなりません。行の長さが同じではないため、文字の長さが'occurence1'ではない行が見つかると、等価性検査が失敗します。アルゴリズムが最初の行をスキップし(fgetlを比較ループの外に呼び出す)、2行目が'occurence1'であるため、3行目までエラーは表示されません。

==を使用するのではなく、strcmpまたはstrcmpiなどのMATLABの組み込み文字列比較関数の1つを使用してロジックチェックを実行します。 MATLABは、静的に型付けされていない間


また、組み込み関数の出力は、一般的によく文書化されています。この場合、fgetlのドキュメントでは、行にファイルの終わりのマーカーのみが含まれていない限り、出力が文字列であることが説明されています。ここではnum2strコールは不要です。

関連する問題