2016-05-18 29 views
0

私はGUIを書いています。ここには、測定のデータを含む.csvファイルがロードされています。ファイルには、明確に定義されている:Matlab:読み込みに失敗する可能性があります.csv

<variable>(<unit>),<variable>(<unit>),... 
0.005,NaN,... 

と私はVarsUnitsDataでそれを処理しています:

A=importdata('foo.csv',','); 
Data=A.data; 
[Vars,Units]=ProcessHeaderLine(A.colheaders); 

問題は、データの一部が破損している場合に発生する - の代わりに番号の文字列がセル内にあり:

<variable>(<unit>),<variable>(<unit>),... 
0.005,"- N/A - ",... 

その場合、importdata機能を実行するために長い時間がかかり、エラーがスローされます。

Error using importdata (line 136)
Unable to open file.

Error in <.m file> (line 384)
A=importdata('foo.csv'],',');

このアプローチは、ヘッダとデータの両方を処理する能力を有するがtry-catchより速い方法であり、文字列「細胞containigデータを処理することができます"?

+0

MATLABは、数値のみのデータファイルを処理するのに最適です。文字列データではそれほど優れているわけではなく、MATLAB読者の誰もレコードの種類を変えることのできるデータではうまく機能しません。あなたの例は、不均衡な引用符を表示しているので、特に問題があります! "文字列"のデータがほぼ同じで、実際のデータが利用できなかった場合のマーカーである場合は、データファイルを前処理することをお勧めします。文字列(この場合は '" N/A')をあなたのアプリケーションにとって有効でない数値(おそらく '-1'?多分' 999999'?)に置き換えてください。 – gariepy

+0

@gariepy文字列は '' -N/A - "実際には、私は問題を特定することができ、半自動で修理することができますが、私はここ(研究室内)の唯一の人であり、それをトレースして直面するほど狂っています。保証されていない封印されたブラックボックス... – Crowley

+0

テストファイルのうちの1つが故障しています - 列全体に文字列が含まれていますが、なぜ「N/A」フラグがあるのか​​わかりません。私は2行目の文字列を探してファイルを扱う方法を決定するのに十分かどうかわからない。 – Crowley

答えて

1

これはMATLABの質問ですが、Perlはファイルを前処理する最良の方法です(PerlはMATLABディストリビューションに含まれています)。次のコマンドラインスクリプトは、"- N/A -"999999に置き換えます。 importdata()を実行した後、好きな置換値を選択し、MATLABで処理します。

perl -pi -e 's/\"- N\/A -\"/999999/g' filename.csv 

注:これによりファイルがインプレースで変更されます。これを試す前に、ファイルのバックアップコピーを作成してください。

注2:MATLAB system()コールを使用して、本当に必要な場合は、この前処理ステップをGUIから実行できます。

1

横向きではなく縦向きに配置されたデータに適していますが、読み込み可能な機能を使用できます。

この場合、str2doubleは " - N/A - "のような無効なテキストを取り、それをNaNに変換します。

関連する問題