我希望有人可以帮助我,如何实现这一目标。 我必须使用包含数据列表的文件,我正在尝试计算两个列表之间的可能排列并将它们保存到新文件中。我意识到我的输出文件非常大(超过30 Gb)。我想知道如何仅在符合特定标准的数据之间进行排列。 F.eks如果:
数据1:VHxBxVVxPx255x98x
数据2:VHxBxVVxPx255x98x
只有来自data1的char(6和7)=来自data2的char(6和7)才会置换。
到目前为止我的代码:
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 :(得分: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 );
答案 1 :(得分:0)
@Kostya ......我可能不幸地没有让你的代码工作。但我设法让它改变我的代码:
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 );