3

私はcvsファイルに一連の文字列を持っています、それらはすべて次の2つのように見えます:

7336598,"[4125420656L, 2428145712L, 1820029797L, 1501679119L, 1980837904L, 380501274L]"
7514340,"[507707719L, 901144614L, 854823005L]"
....

どうすればその中の数字を抽出できますか?のように..7336598、4125420656などを取得するには...

試しtextscanてみましたが、regexpあまり成功しませんでした...

初心者の質問でごめんなさい...そして見てくれてありがとう!:)

編集:各行のサイズは可変です。

4

2 に答える 2

6

とを使用textreadregexpて、CSVファイルから数字のみを抽出できます。

C = textread('file.cvs', '%s', 'delimiter', '\n');
C = regexp(C, '\d+', 'match'); 

正規表現は非常に単純です。MATLABのregexpパターンで\dは、は数字を+示し、はこの数字が少なくとも1回出現する必要があることを示します。matchモードは、regexp一致した文字列を返すように指示します。

結果は文字列のセル配列です。さらに進んで、文字列を数値に変換できます。

C = cellfun(@(x)str2num(sprintf('%s ', x{:})), C, 'Uniform', false)

結果は引き続きセル配列に保存されます。各行に同じ量の数値があることを保証できる場合は、セル配列を行列に変換できます。

A = cell2mat(C);
于 2013-01-27T17:02:51.030 に答える
2

テストするMATLABはありませんが、「[0-9] +」は機能しますか?

それはmatlabの外で私のために働きます:

echo '7336598,"[4125420656L, 2428145712L, 1820029797L, 1501679119L, 1980837904L, 380501274L]"' | grep -o '[0-9]\+'
7336598
4125420656
2428145712
1820029797
1501679119
1980837904
380501274
于 2013-01-27T16:57:15.837 に答える