0

私は音声合成プログラムを作成していますが、これまでのところ、何を言うべきかを含むテキストボックスがあります。ただし、プログラムにテキストボックス内の数字を一度に1つずつ言ってもらいたいと思います。たとえば、テキストボックスには次の内容が含まれる場合があります。

「これは 3820 番です これは別の 3823 番です」

「これは数字のスリー エイト ツー ゼロです」のように、数字を分けて言うプログラムが欲しいです。テキスト読み上げサーバーは、間にコンマがある場合にのみ、数値を個別に分割します。代わりに、テキストボックスには次のものが必要です。

「これは数字 3,8,2,0 です。これは別の数字 3,8,2,3 です」

また、単語の後に数字を検索してその数字を変更する方法はありますか。たとえば、「アカウント」という単語の後の数字のみを変更しますか? 例:

「これはアカウント 3029 これは番号 3009 これは別のアカウント 3030 です」

「これはアカウント 3,0,2,9 です。これは番号 3009 です。これは別のアカウント 3,0,3,0 です。」

4

4 に答える 4

2

単純な string.Replace を検討しましたか? すなわち

myText = myText.Replace("1", "1,");

番号ごとに繰り返します

また、テキスト ボックスを編集する必要がありますか?テキストを音声変換ユーティリティに送信する前に、(テキスト ボックスから取得した) テキストを処理することはできませんか?

于 2011-08-19T23:17:13.587 に答える
2

スペースやその他の空白に沿って分割すると、各単語が数字かどうかを確認できます。

次に、その単語を文字に変換し、コンマを追加してから、元に戻すことができます.

理想的には、テキスト読み上げソリューションでサポートされている場合は、これを非表示のテキスト フィールドにコピーして戻し、それを音声に使用して、ユーザーに変更が表示されないようにします。

ただし、簡単にするために、tryParse を使用することもできます。

http://msdn.microsoft.com/en-us/library/f02979c7.aspx

bool result = Int32.TryParse(value, out number);

値はStringです。

アップデート

質問の編集を読んだ後、単語に分割して、文字列を小文字に変換することから始めます。これにより、簡単に比較できます。次に、各単語をループします。

StringBuilder buf = new StringBuilder();
for(int t = 0; t < wordarray.length - 1; t++) {
  String s = wordarray[t];
  if (numberWord.contains(s) && isWordNumber(wordarray[t + 1]) {
      s = addCommas(wordarray[t + 1]);
  }
  buf.append(' ').append(s);
}
于 2011-08-19T23:16:30.580 に答える
1

このメソッドは数値を解析し、コンマ区切り形式にします。

public string ParseNumbers(string expression)
{
    return string.Join(",", System.Text.RegularExpressions.Regex.Split(expression, "[^\\d]"));
}
于 2011-08-19T23:24:03.493 に答える
0

イベント (KeyPress など) ハンドラをテキスト ボックスに追加する必要があります。

TextBox1.KeyPress +=
                new KeyPressEventHandler(TextBox1_KeyPress);

void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
//do your check here.
}
于 2016-01-01T20:13:18.883 に答える