2016-04-25 90 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的

相关问题