2016-04-25 3 views
0

複数のポストコード(文字と数字)が一意のID番号(文字と数字)に対応する.csvファイルがあります。アレイの複数の内容を別々の単一配列に一致させるにはどうすればよいですか?

例えば

BS2 9TL, E00073143 
BS2 9TB, E00073143 
BS2 9XJ, E00073143 
BS2 8AT, E00073144 
BS2 8TY, E00073144 
BS2 8UA, E00073144 
BS2 8UG, E00073144 

私は、それぞれの郵便番号を格納し、それぞれ固有のID番号のための新しい配列を作成する必要があります。各ID番号のポストコードの量は毎回同じではありません。

ファイルには、9010のポストコードと1258のID番号が含まれています。

誰も私にこれを行う方法を教えてもらえますか?

答えて

0
PCs=importdata('PostalCodes.csv'); %// import data 
PostalCodes = cell(numel(PCs,2)); %// create storage 
IDs = cell(numel(PCs,2)); 
for ii = 1:numel(PCs) 
    tmp = strsplit(PCs{ii,1}, ','); %// split on comma 
    PostalCodes{ii,1} = tmp{1}; 
    IDs{ii,1} = tmp{2}; 
end 

[IDs,idx] = sort(IDs); %// sort on ID 
PostalCodes = PostalCodes(idx); %// sort PCs the same way 
PostalCodes = cell2mat(PostalCodes); %// go to matrix 

[IdNums,~,tmp2] = unique(IDs); %// get unique IDs 
tmp3 = [1; find(diff(tmp2)); numel(IDs)]; %// create index array 

for ii = 1:numel(tmp3)-1; 
    PostalCode(ii).IDs = PostalCodes(tmp3(ii):tmp3(ii+1),:); %// store in struct 
end 

私はあなたのための構造のすべてを入れているので、that's very bad practiseので、あなたが実際に、別々の配列を望んでいません。今、単に入力することにより、構造にアクセスすることができる:

PostalCodeIDs beteen (1)は( IdNumsに見出される)IDに対応し、 (2,:)はID IdNums(1)に対応する第二の郵便番号を駆り立てる
PostalCode(1).IDs(2,:) 
ans = 
BS2 9TL 

0

あなたは、構造体オクターブを使用してこれをテストし

[x,y]=textread('/tmp/file.csv' , '%s %s','delimiter',',') 

csv=[x,y] 


values=struct('key',{},'value',{}) 

keys= unique(csv(:,2)); 
for i = 1:length(keys) 
    values(i).key=keys{i} 
    values(i).value=csv(strcmp(csv(:,2) , keys{i}),1) 
end 

の配列を使用することができます。 matlabでは、ID/IDの直接アクセスのためのキー/値構造体の代わりにマップコンテナを使用できます

関連する問題