2013-05-13 146 views
2

我正在讀取一個小的MSWord文檔並將其內容存儲在一個字符串中。替換字符串中的SOH字符

此字符串中包含SOH特殊字符。我想在將它們寫入新文本(.txt)文件之前用佔位符字符串替換它們,如「#placeholder1」。請注意,我不想修改/編輯MSWord文檔

我不確定是否string.Replace會適合這種情況,或者如果我需要去不同的路線。它可能只是我用於SOH角色的參數。

對此提出建議?

+0

你是如何代表SOH字符? – 2013-05-13 16:50:54

+0

\ x01是我目前正在使用的 – 2013-05-13 16:53:02

+0

我本來期望能夠工作,但可以用'\ u0001'嘗試。請參閱[這些文檔](http://msdn.microsoft.com/en-us/library/aa664669%28v=VS.71%29.aspx)。你的搜索字符串中還有什麼東西可能會被誤認爲是逃生序列的一部分? – 2013-05-13 16:58:12

回答

6

沒有理由爲什麼你在做什麼不應該工作。這裏有一個小例子,你可以ideone測試:

using System; 
public class Test 
{ 
    public static void Main() 
    { 
     String s = "\u0001 This is a test \u0001"; 
     s = s.Replace("\u0001","Yay!"); 
     Console.WriteLine(s); 
    } 
} 

我想你可能是做錯了唯一的其他東西,不儲存您的來電Replace的結果。

+0

這實質上就是我所擁有的。來看看,雖然它看起來可能是我正在閱讀的單詞文件的問題。我用其他地方的副本替換它,替換現在可用。有趣的是在這兩個文件的ASCII輸出中是一樣的... [1] [11] [13] [1] [13] 我雖然接受這個作爲回答,因爲它肯定是正確的。感謝你的幫助James! – 2013-05-13 17:28:48

+0

感謝您的接受。我覺得有助於提出一個最小的例子,因爲它可以縮小問題的根源。在這種情況下,顯然不是錯誤的「替換」。 – 2013-05-13 17:36:14

0

您可以使用下面的函數讀取Microsoft Word文檔的內容(需要參考Microsoft.Office.Interop.Word):

public string ReadWordDoc(string Path) 
{ 
    // microsot word app object 
    Microsoft.Office.Interop.Word.Application _objWord=null; 

    // microsoft word document object 
    Microsoft.Office.Interop.Word.Document _objDoc= null; 

    // obj missing value (ms office) 
    object _objMissing = System.Reflection.Missing.Value; 

    // string builder object to hold doc's content 
    StringBuilder _sb = new StringBuilder(); 

    try 
    { 
     // create new word app object 
     _objWord= new Microsoft.Office.Interop.Word.Application(); 

     // check if the file exists 
     if (!File.Exists(Path)) throw (new FileNotFoundException()); 

     // full path to the document 
     object _objDocPath = Path; 

     // readonly flag 
     bool _objReadOnly = true; 

     // open word doc 
     _objDoc = _objWord.Documents.Open(
      ref _objDocPath, 
      ref _objMissing, 
      _objReadOnly, 
      ref _objMissing, 
      ref _objMissing, 
      ref _objMissing, 
      ref _objMissing, 
      ref _objMissing, 
      ref _objMissing, 
      ref _objMissing, 
      ref _objMissing, 
      ref _objMissing, 
      ref _objMissing, 
      ref _objMissing, 
      ref _objMissing, 
      ref _objMissing); 

     // read entire content into StringBuilder obj 
     for (int i = 1; i <= _objDoc.Paragraphs.Count; i++) 
     { 
      _sb.Append(_objDoc.Paragraphs[i].Range.Text.ToString()); 
      _sb.Append("\r\n"); 
     } 

     // return entire doc's content 
     return _sb.ToString(); 
    } 
    catch { throw; } 
    finally 
    { 
     _sb = null; 

     if (_objDoc != null) { _objDoc.Close(); } 
     _objDoc = null; 

     if (_objWord != null) { _objWord.Quit(); } 
     _objWord = null; 
    } 
}