2016-03-02 353 views
1

我有一個抽象類Writer,它允許客戶寫入。可能是屏幕,可能是一個文件。現在,我嘗試創建派生類來寫入字符串在Matlab中正確寫入字符串(高效並保留轉義字符)

我有兩個問題與表示爲線方法write(...)

  1. 這也可能是非常低效的。有沒有像Matlab中的字符串緩衝區?
  2. 它將轉義序列(如\n)寫入字符串中,而不是採用其實際含義。

我該如何正確地得到表示線?

代碼:

classdef StringTextWriter < Writer 

properties 
    str; 
end 

methods 

    function this = StringTextWriter() 
     % Init the write-target which is a string in our case. 
     % (Other Writer classes would maybe open a file.) 
     this.str = ''; 
    end 

    function write(this, val) 
     % Write to writer target. 
     % (Other Writer classes would maybe use fprinf here for file write.) 

     % ????????????????????????????? 
     this.str = [this.str val]; % How to do this properly? 
     % ????????????????????????????? 
    end 

end 

end 

回答

2

回答您的問題逐點:

  1. 最接近的概念來一個字符串緩衝區將是一個串電池。相反的:

    str = ''; 
    str = [strbuf, 'abc\n']; 
    str = [strbuf, 'def\n']; 
    str = [strbuf, 'ghi\n']; 
    %// and so on... 
    

    一個可以使用

    strbuf = {}; 
    strbuf{end+1} = 'abc\n'; 
    strbuf{end+1} = 'def\n'; 
    strbuf{end+1} = 'ghi\n'; 
    %// and so on... 
    str = sprintf([strbuf{:}]); %// careful about percent signs and single quotes in string 
    

    缺點是,你必須在你每次請求它的時間來重建的字符串。這可以通過在每次將字符串添加到strbuf的末尾時設置一個modified標誌來緩解,每次連接字符串時重置該字符串,並在最後一行中記憶連接的結果(如果是modified,則重建)或者如果不是, 。

    通過選擇更好的策略來生長strbuf單元陣列可以實現進一步的改進;如果您有方法調用write大概這將是有效的。

  2. 轉義序列確實與<?>printf系列鏈接,而不是字符串文字,因此MATLAB通常不關心它們,但sprintf尤其可能。

相關問題