2014-11-10 2 views
0

나는 이것을 도울 수있는 누군가가 나를 도울 수 있기를 바랍니다. 데이터 목록이있는 파일이 필요합니다. 두 목록 간의 가능한 순열을 계산하여 새 파일에 저장하려고합니다. 내 출력 파일이 매우 큽니다 (30Gb 이상). 나는 특정 기준을 충족하는 데이터 사이에서만 순열을 만드는 법을 알고 싶다. F.eks 경우 :matlab : 기준에 따라 두 목록 순열

데이터 1 VHxBxVVxPx255x98x
데이터 2 VHxBxVVxPx255x98x

만 순열 경우 CHAR (6 및 7)에서 = DATA1 CHAR (6 및 7)로부터 DATA2. 지금까지

내 코드 :

fid = fopen('file1.txt'); 
    cac = textscan(fid, '%20s'); 
    fclose(fid); 
    num = cac{1}; 
    fid = fopen('file2.txt'); 
    cac = textscan(fid, '%20s'); 
    fclose(fid); 
    str = cac{1}; 
    fid = fopen('file3.txt', 'w'); 
    for ii = 1 : length(num) 
     for jj = 1 : length(str) 
      fprintf(fid, '%1s - %1s\n', num{ii}, str{jj}); 
     end 
    end 
    fclose(fid);  

답변

0

같은 것을 사용할 수 있습니다 ... 난 unfortunetly 코드가 작동 가져올 수 없습니다. ,

fid = fopen('file1.txt'); cac = textscan(fid, '%20s'); num = cac{1}; fclose(fid); 
fid = fopen('file2.txt'); cac = textscan(fid, '%20s'); str = cac{1}; fclose(fid); 

fid = fopen('file3.txt', 'w'); 

for i = 1 : length(num) 
    for j = 1 : length(str) 
     compare = strcmp(num{i}(1:2),str{j}(1:2)); 
     if compare == 0 
      fprintf(fid, '%1s%1s\n', num{i}, str{j}); 
     end 
    end 
end 

fclose(fid); 
0

당신은 티아 @이

clear all; 
fid = fopen('file1.txt'); cac = textscan(fid, '%20s'); num = cac{1}; fclose(fid); 
fid = fopen('file2.txt'); cac = textscan(fid, '%20s'); str = cac{1}; fclose(fid); 

fid = fopen('file3.txt', 'w'); 

for inum = 1 : size(num,1) 
    inxmCells = cellfun(@(x) strcmp(x(6:7), num{inum}(6:7)), str,'UniformOutput', false); %[0,1] index of (non)matching cells 
    mCells = str(logical(cell2mat(inxmCells))); 
    for j = 1 : length(mCells) 
     fprintf(fid, '%1s - %1s\n', num{inum}, mCells{j}); 
    end 
end 
fclose(fid); 
+0

감사 답변을하지만, 당신이 그것을 내가 네 @mounimkorchi 데이터 1과 데이터 2 –

+0

의 순열을 얻고 것 같다 코드, 제대로 작동 나던 :하지만 난 그래서 내 코드를 변경하는 작업을 얻을 수 있었다 더 큰 문자열 목록의 경우 추가 pairwise 문자열 비교가 필요합니다. 저가 – Kostya

+0

에 응답을 진짜로 작동하고 있지 않다는 것을 새롭게하십시오. 일치하지 않는 셀을 가져 와서이 출력을 얻으려고하는 것 같습니다 (새로운 설명을 쓸 것입니다) –