2012-12-17 38 views
2

我是MATLAB腳本新手。我有一個要刪除的字符串,這個字符串來自一個數組結構化文件。要刪除的字符串在每個循環中都不相同。 CanI將變化的字符串存儲在一個變量中,並使用變量和strrep刪除該字符串?例如:使用strrep刪除字符串

%% string i want to delete is "is_count_del=auto;" 
delstrng=is_count_del_auto; 
%%filetext is the name of the file from which is_count_del=auto; is to be deleted 
r=strrep(filetext,'delstrng',''); 

我猜我沒有正確使用strrep。如何實現預期的結果?

回答

1

如果我理解正確的話,你可以:

% open file to be filtered and output file 
fin = fopen('file-to-be-filtered.txt'); 
fout = fopen('output-file.txt'); 

% for every line of a file-to-be-filtered ... 
tline = fgets(fin); 
while ischar(tline) 
    % ... filter for all possible patterns   
    for delstring % -> delstring iterates over all patterns 
     tline = strrep(tline, delstrng, ''); 
    end 

    % save filtered line to file 
    fprintf(fout, tline); 

    % get next line 
    tline = fgets(fin); 
end 
+0

我不能修改存儲在delstrng變量。它不斷變化.trrep不會刪除delstrng包含的字符串? – learningMatlab

+0

'filetext'也應該是字符串(不是文件)才能工作。在Matlab(AFAIK)中過濾文件的行沒有直接的方法;你應該閱讀 - 過濾器 - 輸出。如果您想要過濾文件的行以輕鬆創建另一個文件,那麼也許您應該考慮'sed','awk'或其他一些標準的Unix實用程序。 – plesiv

+0

謝謝。如果我使用r = strrep(strrep,delstrng,'');它會刪除包含在變量delstrng中的字符串嗎? – learningMatlab

1

strrep可以在電池陣列被應用,所以這使您的工作非常簡單:

% # Read input file 
C = textread('input.txt', '%s', 'delimiter', '\n'); 

% # Remove target string 
C = strrep(C, 'is_count_del=auto', ''); 

% # Write output file 
fid = fopen('output.txt', 'w'); 
for ii = 1:numel(C) 
    fprintf(fid, '%s\r\n', C{ii}); 
end 
fclose(fid)