2016-04-25 49 views
0

我有一個.csv文件,其中多個郵編(字符和數字)對應一個唯一的ID號(也包括字符和數字)。如何將數組的多個內容匹配到單獨的單個數組?

e.g

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,所以我把一切都放在一個結構爲您服務。現在,可以通過簡單地輸入訪問結構:

PostalCode(1).IDs(2,:) 
ans = 
BS2 9TL 

其中(1)高炮PostalCodeIDs對應於ID(其在IdNums實測值),和所述(2,:)撥弄出對應於ID IdNums(1)第二郵政編碼。

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的

相關問題