2011-07-08 18 views
-3

次のプログラムに問題がありますが、コンパイルが実行されますが、入力文字列が正しい形式でないと表示されます。誰でも助けてくれますか?C#正規表現の入力文字列の問題

 string path = @"C:/Documents and Settings/expn261/Desktop/CharacterTest/Output.xls"; 
     string strCharater = File.ReadAllText(path,UTF7Encoding.UTF7); 

     strCharater = Regex.Replace(strCharater, "[èéèëêð]", "e"); 
     strCharater = Regex.Replace(strCharater, "[ÉÈËÊ]", "E"); 
     strCharater = Regex.Replace(strCharater, "[àâä]", "a"); 
     strCharater = Regex.Replace(strCharater, "[ÀÁÂÃÄÅ]", "A"); 
     strCharater = Regex.Replace(strCharater, "[àáâãäå]", "a"); 
     strCharater = Regex.Replace(strCharater, "[ÙÚÛÜ]", "U"); 
     strCharater = Regex.Replace(strCharater, "[ùúûüµ]", "u"); 
     strCharater = Regex.Replace(strCharater, "[òóôõöø]", "o"); 
     strCharater = Regex.Replace(strCharater, "[ÒÓÔÕÖØ]", "O"); 
     strCharater = Regex.Replace(strCharater, "[ìíîï]", "i"); 
     strCharater = Regex.Replace(strCharater, "[ÌÍÎÏ]", "I"); 
     strCharater = Regex.Replace(strCharater, "[š]", "s"); 
     strCharater = Regex.Replace(strCharater, "[Š]", "S"); 
     strCharater = Regex.Replace(strCharater, "[ñ]", "n"); 
     strCharater = Regex.Replace(strCharater, "[Ñ]", "N"); 
     strCharater = Regex.Replace(strCharater, "[ç]", "c"); 
     strCharater = Regex.Replace(strCharater, "[Ç]", "C"); 
     strCharater = Regex.Replace(strCharater, "[ÿ]", "y"); 
     strCharater = Regex.Replace(strCharater, "[Ÿ]", "Y"); 
     strCharater = Regex.Replace(strCharater, "[ž]", "z"); 
     strCharater = Regex.Replace(strCharater, "[Ž]", "Z"); 
     strCharater = Regex.Replace(strCharater, "[Ð]", "D"); 
     strCharater = Regex.Replace(strCharater, "[œ]", "oe"); 
     strCharater = Regex.Replace(strCharater, "[Œ]", "Oe"); 
     strCharater = Regex.Replace(strCharater, "[«»\u201C\u201D\u201E\u201F\u2033\u2036]", "\""); 
     strCharater = Regex.Replace(strCharater, "[\u2026]", "..."); 

     string path2 = (@"C:/Documents and Settings/expn261/My Documents/CharacterReplaceTest.csv"); 
     StreamWriter sw = new StreamWriter(path2); 
     sw.WriteLine(strCharater, UTF7Encoding.UTF7); 
+3

どの文字列が表示されますか? – Edgar

+1

質問の赤いスレッドは非常に興味深いですが、時折の正解を特に正しいものとしてマークすることを検討してください。答えを得るための明確で洗練された質問をする能力を持っていることを他のユーザーが助けてくれるよう奨励します。 –

+0

十分な情報がない質問をして、それに応答しません。 -1 –

答えて

3

これはあまりよく知られているわけではありませんが、魅力的です。すべての発音区別記号を削除します。

// using System.Globalization 
public static string RemoveDiacritics(string s) { 
    s = s.Normalize(NormalizationForm.FormD); 
    StringBuilder sb = new StringBuilder(); 

    for (int i = 0; i < s.Length; i++) { 
     if (CharUnicodeInfo.GetUnicodeCategory(s[i]) != UnicodeCategory.NonSpacingMark) sb.Append(s[i]); 
    } 

    return sb.ToString(); 
} 
1

例外が発生した場合、コンパイラは戻ってその例外の原因となった最初のメソッド呼び出しのチェーンに行く、例外が発生したすべての場所のアドレスですstack traceと呼ばれるバンドルを作成します。ブロック全体を見直す代わりに、この問題が存在する行を見て、その行に集中してみてください。 :)

2

あなたがしようとしているように見えるのは、文字列内の文字を翻訳することです。これは、あなたが実際には大きなswitch文を書きたいかもしれないそれらのケースのいずれかになります。

var sb = new StringBuilder(); 
foreach (char c in strCharater) // could you choose a better name than strCharater? 
{ 
    switch (c) 
    { 
     case 'è': 
     case 'é': 
      sb.Append('e'); 
      break; 
     case 'ä': 
     case 'à': 
      break; 
     default: 
      sb.Add(c); 
      break; 
    } 
} 
strCharater = sb.ToString(); 

このアプローチでは、割り当てられたゴミを収集する必要がある(不変)の文字列のトンを作成しないという利点があります。また、JITはこれをコンパイルして非常に高速なコードにする必要があります。