Замена символьного периода эквивалентным азбуке Морзе портит TextBox - PullRequest
1 голос
/ 16 декабря 2011

Я пытаюсь заменить все символы на их эквиваленты азбуки Морзе. Для этого я использовал метод textBlock.Text.Replace (), и он работал нормально, пока не достиг символа точки. Когда я пытаюсь заменить его на «.-.-.-», он работает нормально, НО все остальные символы теперь испорчены. До периода персонажа все работало отлично.

Вот код

namespace PivotApp1
    {
        public partial class Textmorse : PhoneApplicationPage
        {



            public string[] aakkoset = { "A", "B", "C", "D", "E", 
                                         "F", "G", "H", "I", "J", 
                                         "K", "L", "M", "N", "O", 
                                         "P", "Q", "R", "S", "T", 
                                         "U", "V","W", "X", "Y", 
                                         "Z", "Ä", "Ö", "0", "1", 
                                         "2", "3", "4", "5", "6", 
                                         "7", "8", "9", "?", ":",
                                         ",", "@", "/", "=", " ",
                                         "."};

            public string[] morse = { ".-  ", "-...  ", "-.-.  ", "-..  ", ".  ", 
                                      "..-.  ", "--.  ", "....  ", "..  ", ".---  ", 
                                      "-.-  ", ".-..  ", "--  ", "-.  ", "---  ", 
                                      ".--.  ", "--.-  ", ".-.  ", "...  ", "-  ", 
                                      "..-  ", "...-  ", ".--  ", "-..-  ", "-.--  ", 
                                      "--..  ", ".-.-  ", "---.  ", "-----  ", ".----  ", 
                                      "..---  ", "...--  ", "....-  ", ".....  ", "-....  ", 
                                      "--...  ", "---..  ","----.  ", "..--..  ", "---...  ",
                                      "-....-  ", ".--.-.  ", "-..-.  ", "-...-  ", "  ", 
                                      ".-.-.-"};

            public Textmorse()
            {

                InitializeComponent();

            }

            private void TBoxText1_TextChanged(object sender, TextChangedEventArgs e)
            {

                CreateMorseText();

            }
            public void CreateMorseText() 
            {
                tBlockMorse1.Text = TBoxText1.Text.ToUpper()
                    .Replace(aakkoset[0], morse[0])
                    .Replace(aakkoset[1], morse[1])
                    .Replace(aakkoset[2], morse[2])
                    .Replace(aakkoset[3], morse[3])
                    .Replace(aakkoset[4], morse[4])
                    .Replace(aakkoset[5], morse[5])
                    .Replace(aakkoset[6], morse[6])
                    .Replace(aakkoset[7], morse[7])
                    .Replace(aakkoset[8], morse[8])
                    .Replace(aakkoset[9], morse[9])
                    .Replace(aakkoset[10], morse[10])
                    .Replace(aakkoset[11], morse[11])
                    .Replace(aakkoset[12], morse[12])
                    .Replace(aakkoset[13], morse[13])
                    .Replace(aakkoset[14], morse[14])
                    .Replace(aakkoset[15], morse[15])
                    .Replace(aakkoset[16], morse[16])
                    .Replace(aakkoset[17], morse[17])
                    .Replace(aakkoset[18], morse[18])
                    .Replace(aakkoset[19], morse[19])
                    .Replace(aakkoset[20], morse[20])
                    .Replace(aakkoset[21], morse[21])
                    .Replace(aakkoset[22], morse[22])
                    .Replace(aakkoset[23], morse[23])
                    .Replace(aakkoset[24], morse[24])
                    .Replace(aakkoset[25], morse[25])
                    .Replace(aakkoset[26], morse[26])
                    .Replace(aakkoset[27], morse[27])
                    .Replace(aakkoset[28], morse[28])
                    .Replace(aakkoset[29], morse[29])
                    .Replace(aakkoset[30], morse[30])
                    .Replace(aakkoset[31], morse[31])
                    .Replace(aakkoset[32], morse[32])
                    .Replace(aakkoset[33], morse[33])
                    .Replace(aakkoset[34], morse[34])
                    .Replace(aakkoset[35], morse[35])
                    .Replace(aakkoset[36], morse[36])
                    .Replace(aakkoset[37], morse[37])
                    .Replace(aakkoset[38], morse[38])
                    .Replace(aakkoset[39], morse[39])
                    .Replace(aakkoset[40], morse[40])
                    .Replace(aakkoset[41], morse[41])
                    .Replace(aakkoset[42], morse[42])
                    .Replace(aakkoset[43], morse[43])
                    .Replace(aakkoset[44], morse[44])
                    .Replace(aakkoset[45], morse[45]);        
            }

            private void TBoxText1_Loaded(object sender, RoutedEventArgs e)
            {
                TBoxText1.Focus();
            }
        }
    }

Ответы [ 4 ]

8 голосов
/ 16 декабря 2011

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

Сначала сделайте точку или, более надежно, переберите строку один раз и замените каждый символ в том виде, в каком он есть.

4 голосов
/ 16 декабря 2011

Я бы использовал словарь или какую-нибудь коллекцию пар KeyValue

Эта страница имеет хороший пример.

1 голос
/ 16 декабря 2011

Я бы переместил точку, заменив .Replace(aakoset[45], morse[45]) в начало.

Вероятно, происходит то, что вы заменяете всех своих персонажей на точки (точки) и тире, а также когда "период"get заменяет, он видит все ваши "точки" как периоды.

0 голосов
/ 16 декабря 2011

Делать все периоды первым, а не последним?D'OH!Слишком медленно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...