3

テキストファイルがあり、MATLABにインポートしてリストにします。

Person1
name = steven
grade = 11
age= 17

Person2
name = mike
grade = 9
age= 15

Person3
name = taylor
grade = 11
age= 17

上記のような数百のエントリがあります。それぞれが空白行で区切られています。テキストをスキャンして、各空白行の間の情報をリストの項目にできると思っていました。また、以下のようなリストができたら、一人一人を名前で調べられるようにしたいと思います。

私は次のようなものが欲しいです:

x = [Person1         Person2       Person3      
     name = steven   name = mike   name = taylor
     grade = 11      grade = 9     grade = 11
     age = 17        age = 15      age = 17]

これは非常に簡単に思えますが、私はこれまでこれに問題を抱えています。何かを見落としているかもしれません。誰かアイデアやアドバイスはありますか?

4

2 に答える 2

5

これを行う可能性のある方法はたくさんあります。(他のフィールドと同様に)データファイル内のageとの間にスペースがあると想定すると、TEXTSCANを使用できます。=

fid = fopen('people.txt','r');           %# Open the data file
peopleData = textscan(fid,'%s %*s %s');  %# Read 3 columns of strings per row,
                                         %#   ignoring the middle column
fclose(fid);                             %# Close the data file

次に、次の方法でデータを処理して、フィールド、、、および:を持つ3行1列の構造体配列を作成'name'でき'grade'ます'age'

nFields = 3;                                       %# Number of fields/person
fields = peopleData{1}(2:nFields+1);               %# Get the field names
peopleData = reshape(peopleData{2},nFields+1,[]);  %# Reshape the data
peopleData(1,:) = [];                              %# Remove the top row
peopleData(2:nFields,:) = cellfun(@str2double,...  %# Convert strings to numbers
                                  peopleData(2:nFields,:),...
                                  'UniformOutput',false);
x = cell2struct(peopleData,fields,1);              %# Put data in a structure

上記では、関数RESHAPECELLFUNSTR2DOUBLE、およびCELL2STRUCTを使用しています。

于 2010-06-15T19:33:44.787 に答える
3

フィールド「name」、「grade」、および「age」を使用して「person」構造を作成します

次に、遺伝子に関する以前の質問とほぼ同じようfgetlに組み合わせて使用​​します。regexp

于 2010-06-15T18:56:28.667 に答える