2016-07-15 29 views
1

にIは、各要素が文字列である(「13-07月16,10.46,100.63,15.7,54.4,55656465」であるMatlabの文字列の変換配列

sLine = 
{ 
    [1,1] = 13-Jul-16,10.46,100.63,15.7,54.4,55656465 
    [1,2] = 12-Jul-16,10.47,100.64,15.7,54.4,55656465 
    [1,3] = 11-Jul-16,10.48,100.65,15.7,54.4,55656465 
    [1,4] = 10-Jul-16,10.49,100.66,15.7,54.4,55656465 
} 

た形式の文字列配列を得文字列)。私は6つのベクトル、

[a b c d e f] = ... 

のようなものようにこれを変換する必要が

は、例えば、1列目のために、それは

a = [13-Jul-16;12-Jul-16;11-Jul-16;10-Jul-16] 

だろう、私はcell2mat機能を使用しようとしました何らかの理由でフィールドを行列要素に分割するのではなく、文字列全体を何かに連結します。

cell2mat(sLine) 
ans = 
    13-Jul-16,10.46,100.63,15.7,54.4,5565646512-Jul-16,10.47,100.64,15.7,54.4,5565646511-Jul-16,10.48,100.65,15.7,54.4,5565646510-Jul-16,10.49,100.66,15.7,54.4,55656465 

どうすればこの問題を解決できますか?

アップデートは私は今、列の日付を得ることができ@Sueverする手順

pFile = urlread('http://www.google.com/finance/historical?q=BVMF:PETR4&num=365&output=csv'); 
sLine = strsplit(pFile,'\n'); 
sLine(:,1)=[]; 

更新

おかげで、次のSLINE行列を得ました。だから、コードの最後に更新されたバージョンは、したがって、あなたがcell2matを使用するのではなく、いくつかの文字列操作を行う必要があります、

pFile = urlread('http://www.google.com/finance/historical?q=BVMF:PETR4&num=365&output=csv'); 
pFile=strtrim(pFile); 
sLine = strsplit(pFile,'\n'); 
sLine(:,1)=[]; 

split_values = regexp(sLine, ',', 'split'); 

values = cat(1, split_values{:}); 
values(:,1) 
+0

マット(数値行列)には文字列を含めることができないため、 'cell2mat'は使用できません。セル配列を使用する必要があります。あなたが探している関数は 'strsplit'です – GameOfThrows

+0

私は前にstrsplitを試みましたが、成功しませんでした。とにかく、その文字列を数値に変換して、各数値列を別々のベクトルに配置する必要があります。 – Rego

答えて

2

あなたのデータは、すべての文字列です。

各要素を,文字で分割し、結果を連結したいと思うでしょう。あなたはそれがより簡潔になりたい場合は

sLine = {'13-Jul-16,10.46,100.63,15.7,54.4,55656465', 
     '12-Jul-16,10.47,100.64,15.7,54.4,55656465', 
     '11-Jul-16,10.48,100.65,15.7,54.4,55656465', 
     '10-Jul-16,10.49,100.66,15.7,54.4,55656465'}; 

split_values = cellfun(@(x)strsplit(x, ','), sLine, 'uniformoutput', 0); 
values = cat(1, split_values{:}); 

values(:,1) 

% { 
%  [1,1] = 13-Jul-16 
%  [2,1] = 12-Jul-16 
%  [3,1] = 11-Jul-16 
%  [4,1] = 10-Jul-16 
% } 

、我々はそれを入力として、セル配列を受け入れることができるのでstrsplitするのではなく、それを分割するregexpを使用することができます。

split_values = regexp(sLine, ',', 'split'); 
values = cat(1, split_values{:}); 

更新

あなたが投稿したコードに問題が入力の末尾に改行があることですし、改行で分割するとき、あなたのsLineセル配列の最後の要素は空ですあなたの問題を引き起こします。末尾の改行を削除するには、セル配列を作成する前にstrtrimpFileに配置します。

sLine = strsplit(strtrim(pFile), '\n'); 
sLine(:,1) = []; 
+1

すごい速かった。あなたはピラニアをrepします:D – GameOfThrows

+0

すぐにお返事ありがとうございます。私の場合、猫の呼び出しに次元の不一致があり、私は自分のsLineがあなたのものに置き換えられていることに気付きました。しかし、それを転置しても不一致は修正されません。私は、私のsLineマトリックスを得るための正確な手順を使って投稿を更新しました。それは私が見ていない細かいディテールでなければなりません。再度、感謝します。 – Rego

+0

@Regoあなたが問題を抱えている理由の説明で更新されました。 – Suever

関連する問題