2012-05-16 67 views
1

我想刪除「 - 」和「\ cr」之間的文字。刪除「 - 」和「 cr」之間的文字

我實際上讀出一個文件,如果文件中有一個「 - 」,它應該除去「 - 」以及任何所有內容,直到「\ cr」。

我正在逐行讀取文件。

using (StreamReader readFile = new StreamReader(filePath)) 
{ 
    string line; 

    while ((line = readFile.ReadLine()) != null) 
    { 
    } 
} 
使用字符串來尋找人物

line.Substring(line.IndexOf("--"),line.IndexOf("\cr")); 

,但我有尋找的分隔符,每行一個問題

我用盡

我在想寫這樣的事情

while ((line = readFile.ReadLine()) != null) 
{ 
    if (line.Substring(line.IndexOf("--")) // If it has "--" 
    { 
     //Then remove all text from between the 2 delimiters 

    } 
} 

請幫忙

感謝

編輯:

問題解決了,雖然我所遇到的另一個問題是,我無法在多行如發生意見/* */之間刪除評論。所以我需要刪除/* */之間的所有文字。

任何建議或幫助? 感謝

+0

這「\ CR」看起來有些奇怪。如果你的意思是「回車」中的CR,它寫成「\ r」,但是已經被ReadLine剝離了,這種方式只是從「 - 」開始刪除所有內容。 –

+0

謝謝eugene,你其實很對。它應該是回車 –

+0

需要發佈什麼樣的問題才能獲得UpVote? –

回答

4

簡單的解決辦法是隻使用正則表達式就行替換:

line = Regex.Replace(line, @"--.*$", ""); 

這是假設,無論你的意思\cr是該行的實際結束(不包括反正如果你用ReadLine()讀取它),那麼這將從--中刪除所有內容,直到行結束。

要更換/* ... */評論過,你可以使用:

line = Regex.Replace(line, @"--.*$|/\*.*?\*/", ""); 

快速PowerShell的測試:

PS> $a = 'foo bar','foo bar -- some comment','foo /* another comment */ bar' 
PS> $a -replace '--.*$|/\*.*?\*/' 
foo bar 
foo bar 
foo bar 
+0

我會嘗試regex.replace()方法。但是。* $是什麼意思?當我想在正則表達式中使用char時,我必須將它放入嗎? –

+0

你的答案工作得很好,除了現在我有一個問題/ * * /評論 –

+0

我設法刪除'/ *'但'* /'不會被刪除 –

4

試試這個

line.Substring(line.IndexOf("--")); 

至於喬伊提到的ReadLine()永遠不會包含Environment.NewLine和\ cr對應於Environment.NewLine

0

它看起來像你想忽略包含註釋的行。如何

if (!line.StartsWith("--")) { /* do stuff if it's not a comment */ } 

甚至

if (!line.TrimStart(' ', '\t').StartsWith("--")) { /* do stuff if it's not a comment */ } 

在該行的開始忽略空白。

+0

我沒有得到這樣的印象:這些行必須*用'--'開始*。否則他們不會使用'IndexOf'。 – Joey

1

只是爲了展示如何刪除文件中每一行的註釋。這是一個辦法:

var newLines = from l in File.ReadAllLines(path) 
       let indexComment = l.IndexOf("--") 
       select indexComment == -1 ? l : l.Substring(0, indexComment); 
File.WriteAllLines(path, newLines);  // rewrite all changes to the file 

編輯:如果你也想所有/**/之間移除,這是一個可能的實現:

String[] oldLines = File.ReadAllLines(path); 
List<String> newLines = new List<String>(oldLines.Length); 
foreach (String unmodifiedLine in oldLines) 
{ 
    String line = unmodifiedLine; 
    int indexCommentStart = line.IndexOf("/*"); 
    int indexComment = line.IndexOf("--"); 

    while (indexCommentStart != -1 && (indexComment == -1 || indexComment > indexCommentStart)) 
    { 
     int indexCommentEnd = line.IndexOf("*/", indexCommentStart); 
     if (indexCommentEnd == -1) 
      indexCommentEnd = line.Length - 1; 
     else 
      indexCommentEnd += "*/".Length; 
     line = line.Remove(indexCommentStart, indexCommentEnd - indexCommentStart); 
     indexCommentStart = line.IndexOf("/*"); 
    } 

    indexComment = line.IndexOf("--"); 
    if (indexComment == -1) 
     newLines.Add(line); 
    else 
     newLines.Add(line.Substring(0, indexComment)); 
} 

File.WriteAllLines(path, newLines); 
+0

嗨蒂姆,如果你想刪除/ *「」* /之間的所有文本,你會怎麼做。中間的文本出現在多行上。這是在說我想刪除 –

+0

@ Sigh-AniDe:你還沒有在你的問題中提到這個。 –

+0

我將這個問題添加到我的問題:? –