Нужна помощь в преобразовании текста в фонетический алфавит НАТО - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь преобразовать текст в текстовом поле в фонетический алфавит, и я не знаю, как это сделать. У меня есть TextBox1 в качестве основного текстового поля, кнопка для преобразования - Button9, и я хотел бы, чтобы вывод был в Label10.

Примером того, что я пытаюсь получить, является то, что кто-то вводит, например, Test в текстовое поле, нажимает кнопку, и на этикетке отображается Tango Echo Sierra Tango.

Если возможно, было бы неплохо, чтобы он автоматически переводился при вводе.

Я попытался использовать пример кода, который я нашел в интернете с Как заменить буквы в текстовом поле, используя vb.net , но это не так, как хотелось бы при переводе.

(пример того, что я пробовал, без добавления в фонетический алфавит)

If TextBox1.Text.Contains("a") Then
    TextBox1.Text = TextBox1.Text.Replace("a", "c")
End If

If TextBox1.Text.Contains("b") Then
    TextBox1.Text = TextBox1.Text.Replace("b", "d")
End If

If TextBox1.Text.Contains("c") Then
    TextBox1.Text = TextBox1.Text.Replace("c", "e")
End If

If TextBox1.Text.Contains("d") Then
    TextBox1.Text = TextBox1.Text.Replace("d", "f")
End If

If TextBox1.Text.Contains("e") Then
    TextBox1.Text = TextBox1.Text.Replace("e", "g")
End If

If TextBox1.Text.Contains("f") Then
    TextBox1.Text = TextBox1.Text.Replace("f", "h")
End If

If TextBox1.Text.Contains("g") Then
    TextBox1.Text = TextBox1.Text.Replace("g", "i")
End If

If TextBox1.Text.Contains("h") Then
    TextBox1.Text = TextBox1.Text.Replace("h", "j")
End If

If TextBox1.Text.Contains("i") Then
    TextBox1.Text = TextBox1.Text.Replace("i", "k")
End If

If TextBox1.Text.Contains("j") Then
    TextBox1.Text = TextBox1.Text.Replace("j", "l")
End If

If TextBox1.Text.Contains("k") Then
    TextBox1.Text = TextBox1.Text.Replace("k", "m")
End If

If TextBox1.Text.Contains("l") Then
    TextBox1.Text = TextBox1.Text.Replace("l", "n")
End If

If TextBox1.Text.Contains("m") Then
    TextBox1.Text = TextBox1.Text.Replace("m", "o")

End If

If TextBox1.Text.Contains("n") Then
    TextBox1.Text = TextBox1.Text.Replace("n", "p")
End If

If TextBox1.Text.Contains("o") Then
    TextBox1.Text = TextBox1.Text.Replace("o", "q")
End If

If TextBox1.Text.Contains("p") Then
    TextBox1.Text = TextBox1.Text.Replace("p", "r")
End If

If TextBox1.Text.Contains("q") Then
    TextBox1.Text = TextBox1.Text.Replace("q", "s")
End If

If TextBox1.Text.Contains("r") Then
    TextBox1.Text = TextBox1.Text.Replace("r", "t")
End If

If TextBox1.Text.Contains("s") Then
    TextBox1.Text = TextBox1.Text.Replace("s", "u")
End If

If TextBox1.Text.Contains("t") Then
    TextBox1.Text = TextBox1.Text.Replace("t", "v")
End If

If TextBox1.Text.Contains("u") Then
    TextBox1.Text = TextBox1.Text.Replace("u", "w")
End If

If TextBox1.Text.Contains("v") Then
    TextBox1.Text = TextBox1.Text.Replace("v", "x")
End If

If TextBox1.Text.Contains("w") Then
    TextBox1.Text = TextBox1.Text.Replace("w", "y")
End If

If TextBox1.Text.Contains("x") Then
    TextBox1.Text = TextBox1.Text.Replace("x", "z")
End If

If TextBox1.Text.Contains("y") Then
    TextBox1.Text = TextBox1.Text.Replace("y", "a")
End If

If TextBox1.Text.Contains("z") Then
    TextBox1.Text = TextBox1.Text.Replace("z", "b")
End If

Каждое письмо переводилось, и оно не показывалось в правильном поле. Я довольно новичок в VB и раньше такого не делал.

1 Ответ

2 голосов
/ 03 июня 2019

Есть множество способов выполнить то, что вы пытаетесь сделать.

Вот один из них. Возможно, он не самый лучший, но он дает вам представление о том, как этого добиться.

Во-первых, я определил словарь (Phonetic), который отображает первую заглавную букву в фонетический эквивалент:

Dim Phonetic As Dictionary(Of String, String)

Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    ' List of phonetic words
    Dim Words() As String = {"Alfa", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliett", "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whiskey", "X - ray", "Yankee", "Zulu"}

    ' Create dictionary to hold words and load with words
    Phonetic = New Dictionary(Of String, String)
    For Each Word As String In Words
        Phonetic.Add(Word.Substring(0, 1), Word)
    Next
End Sub

Этот словарь является переменной-членом, поэтому к нему можно получить доступ в любом месте формы. Обязательно определите его (Dim ...) на уровне формы, а не внутри метода или обработчика событий.

Далее, когда нажимается кнопка, каждая буква текстового поля оценивается, и соответствующее фонетическое слово возвращается из словаря. Пробел также добавлен. Результат обрезается (для удаления последнего пробела) и отображается в метке:

Private Sub Button9_Click(sender As System.Object, e As System.EventArgs) Handles Button9.Click
    LoadOutput()
End Sub

Private Sub LoadOutput()
    If Not Phonetic Is Nothing Then
        Dim Output As String = String.Empty

        For Each Letter As String In TextBox1.Text.ToUpper()
            Output += Phonetic(Letter) + " "
        Next
        Output = Output.Trim()

        Label10.Text = Output
    End If
End Sub

При нажатии на кнопку будет выведено то, что вы ищете. Есть много других способов выполнить эту задачу - это всего лишь пример того, как вы могли бы это сделать.

Чтобы автоматически перевести текст при вводе в TextBox, просто используйте событие TextChanged:

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
    LoadOutput()
End Sub

EDIT

После комментария от OP также обрабатывать недопустимые символы (включая пробелы).

Это достигается в LoadOutput путем проверки наличия буквы в Dictionary. Если письмо не существует, мы добавляем его без преобразования. Если это так, мы просто конвертируем его, как и прежде, и добавляем:

Private Sub LoadOutput()
        ...
        For Each Letter As String In TextBox1.Text.ToUpper()
            If Phonetic.ContainsKey(Letter) Then
                Output += Phonetic(Letter) + " "
            Else
                Output += Letter
            End If
        Next
        ...
End Sub

Что касается запроса на преобразование 1 в One и т. Д., Это требует дополнительных усилий. Вам придется вручную добавить их в словарь во время Form1_Load:

Private Sub Form1_Load(...)
    ...
        Phonetic.Add(Word.Substring(0, 1), Word)
    Next
    Phonetic.Add("1", "One")
    Phonetic.Add("2", "Two")
    ... (And so on)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...