2016-04-25 8 views
0

Ich habe eine CSV-Datei, wo mehrere Postleitzahlen (Zeichen und Zahlen) einer eindeutigen ID-Nummer (auch Zeichen und Zahlen) entsprechen.Wie kann ich mehrere Inhalte eines Arrays einem separaten einzelnen Array zuordnen?

beispiel

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

Ich brauche ein neues Array für jede eindeutige ID-Nummer zu erstellen, die die jeweiligen Postleitzahlen speichern. Die Anzahl der Postleitzahlen für jede ID-Nummer ist nicht immer gleich.

Die Datei enthält 9010 Postleitzahlen und 1258 ID-Nummern.

Kann mir jemand zeigen, wie man das macht?

Antwort

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 

Sie nicht wirklich separate Arrays wollen, weil that's very bad practise, so habe ich alles in einer Struktur für Sie zusammengestellt. Sie können nun die Struktur zugreifen, indem Sie einfach Folgendes eingeben:

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

wo die (1) beteen PostalCode und IDs entspricht der ID (die in IdNums gefunden wird) und die (2,:) zupft IdNums(1) die zweite Postleitzahl entsprechend ID aus.

0

Sie könnten eine Reihe von structs

[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 

Getestet dies mit Oktave verwenden. Auf Matlab können Sie einen Map-Container anstelle von Schlüssel/Wert-Strukturen für den direkten Zugriff über die IDs

verwenden