を使用して読み取りおよび解析しているコンマ区切りのテキストファイルがありますtextscan
。2つのフィールドは、日付と時刻です。datenum
結果の2つのベクトルを合計することを目的として、を使用して両方のフィールドを小数日に変換することができます。
私の問題は、データメッセージの1つにTIMEフィールドが含まれているが、DATEフィールドは含まれていないことがよくあることです。これはtextscan
、空の文字列として読み込まれます。datenum
空の文字列に遭遇すると、NaN
値や他のフィラー値ではなく、空の行列が返されることがわかりました。これにより、同じ長さではないTIMEとDATEのベクトルが作成され、データの整列方法を明確に示すことができなくなります。
データの順序を維持するような方法でこれらの空の文字列を処理するにはどうすればよいですか?datenum
フィールドを単に無視するのではなく、null値を出力する方法はありますか?私は持っていいと思いNaN
または0
空の文字列を示すために、または同様の値を。可能であればこれをベクトル化しておくことをお勧めしfor
ますが、ループが必要になる可能性があることは理解しています。
簡単な方法の1つは、論理インデックスを使用して有効な日付のみを処理0
し、出力で空の日付を初期化することです。たとえば、セル配列に 日付C
がある場合cellfun
、とisempty
を使用して次のようにインデックスを取得できます。
index = cellfun(@isempty, C);
out(index) = 0; % Empty dates are 0 in output
out(~index) = datenum(C(~index), 'ddmmyy');
または、最初に空の文字列を'0/0/0'
、に置き換えることもできます。これは、0
によってに変換されdatenum
ます。例えば:
C(cellfun(@isempty, C)) = {'0/0/0'};
ただし、この変換は特定の'ddmmyy'
形式でdatenum('000000', 'ddmmyy')
は機能しません(つまり0
、PivotYear
引数を指定しても、は返されません)。最初のオプションはあなたの最善の策かもしれません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加