2012-01-26 14 views
1

現在、日本語の文字を英語の文字に変換するプログラムに取り組んでいます。 それはそれほどうまくいきません。最後の数日間、私は試してみようと努力してきましたが、それはおそらく何か小さなダムの問題ですが、私はそれを見つけることができません。私はこのすべてにかなり新しいので、どんな助けもありがとう。データセットに関連するC#の奇妙な問題

問題は、ローマ字を変換したいだけですが、コードを変更すると、「if」から「if」に変更すると、ひらがなとカタカナは変換されますが、ローマ字は変換されません。

 string fromtype = ""; 

     // Determines what type the character is currently 
     // && fromtype == "" added to avoid weird unexplainable errors... 
     if (CharacterTable.Select("Romaji = '" + character + "'") != null && fromtype == "") 
     { 
      fromtype = "Romaji"; 
     } 
     else if (CharacterTable.Select("Hiragana = '" + character + "'") != null && fromtype == "") 
     { 
      fromtype = "Hiragana"; 
     } 
     else if (CharacterTable.Select("Katakana = '" + character + "'") != null && fromtype == "") 
     { 
      fromtype = "Katakana"; 
     } 

私も自動的に文字が何であるかの種類を見つけると、ユーザはそれを選択する必要がありますようにラジオボタンでそれを行うにしようと、この機能を削除しようとしましたが、何とかほとんど同じことをやっているようです。 ..私はこの時点で完全に混乱しているので、どんな助けも大歓迎です。ここで

は完全なコードです:

public string CheckCharacter(string character, int RequestedCharType) 
     { 
      // RequestedCharType 
      // 1 = Romaji 
      // 2 = Hiragana 
      // 3 = Katakana 

      //-- Instantiate the data set and table 
      DataSet CharacterDatabase = new DataSet(); 
      DataTable CharacterTable = CharacterDatabase.Tables.Add(); 

      //-- Add columns to the data table 
      CharacterTable.Columns.Add("Romaji", typeof(string)); 
      CharacterTable.Columns.Add("Hiragana", typeof(string)); 
      CharacterTable.Columns.Add("Katakana", typeof(string)); 


      //-- Add rows to the data table 
      CharacterTable.Rows.Add("a", "あ", "ア"); 
      CharacterTable.Rows.Add("i", "い", "イ"); 


      // Sets fromtype to the type the character(s) currently is/are 
      string fromtype = ""; 

      // Determines what type the character is currently 
      // && fromtype == "" added to avoid weird unexplainable errors... 
      if (CharacterTable.Select("Romaji = '" + character + "'") != null && fromtype == "") 
      { 
       fromtype = "Romaji"; 
      } 
      else if (CharacterTable.Select("Hiragana = '" + character + "'") != null && fromtype == "") 
      { 
       fromtype = "Hiragana"; 
      } 
      else if (CharacterTable.Select("Katakana = '" + character + "'") != null && fromtype == "") 
      { 
       fromtype = "Katakana"; 
      } 



      // generates a new variable to store the return in 
      DataRow[] filteredRows = CharacterTable.Select(fromtype + " = '" + character + "'"); 

      // Return the converted character in the requested type 
      foreach (DataRow row in filteredRows) 
      { 
       if (RequestedCharType == 1) 
       { 
        return row["Romaji"].ToString(); 
       } 
       if (RequestedCharType == 2) 
       { 
        return row["Hiragana"].ToString(); 
       } 
       if (RequestedCharType == 3) 
       { 
        return row["Katakana"].ToString(); 
       } 
      } 


      // if it couldn't find the character, return the original character 
      return character; 
     } 
+0

FWIWはローマ字と呼ばれ、「ローマ字」(数字はアラビア語ですが、うまくいけばローマ数字を使用する必要はありません)。 –

答えて

1

あなたの問題はどのようにSelect作品のあなたの誤解です。 Selectは一致しない場合はnullを返しませんので、最初のifは常にtrueです。私はよく分からない

if (CharacterTable.Select("Romaji = '" + character + "'").Length > 0) 
{ 
    fromtype = "Romaji"; 
} 
else ... 
  • if (CharacterTable.Select("Romaji = '" + character + "'").Any()) 
    { 
        fromtype = "Romaji"; 
    } 
    else ... 
    

    別の方法としては、配列の長さを確認することができます。代わりに、あなたはEnumerable.Any()で行うことができます任意の結果は(using System.Linqを追加)があったかどうかをチェックする必要がありますfromType == ""ビットはこれについてすべてであることは確かに必要ではありません。

  • あなたのchar型にenum型を作成することを検討してください。
  • このメソッドは静的にすることができます。
  • if (RequestedCharType == 1) &cの代わりにswitchステートメントを使用することを検討してください。
+0

申し訳ありません!私はそれを試しに行くだろうと私は申し訳ありませんが、私はまだ非常にこのプログラムにちょうどうまくいけば、私は幸せheheになる限り、これは非常に新しいです。 – user1071461

+1

申し訳ありません。私たちは一度そこにいました(まだそこから離れたくない)。 –

+0

はい、それは動作します^^ありがとう、私は今この日を把握しようとしていました^^ – user1071461