Ошибка "startIndex должен быть меньше, чем длина строки." - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Задача такая: "Достать из файла координаты x,y и z, преобразовать в некую строку, которую отправить последовательным портом." Читаемые строки из файла имеют вот такой вид:
Feed X 0.00100 Y 1.49011 Z 0.00000 R 107.29096
У меня все отлично работает пока не считает вот эту строку:
Feed X 4.99900 Y 1.51009 Z 0.00000 R 108.73015
Зависает на обработке "Y". Вот код:
...
        public string ConverToString(double n)
        {
            string str = n.ToString();
            int i = str.IndexOf(',');
            if (i != -1)
            {
                string str_A = str.Remove(i);
                string str_B = (str.Substring(i + 1));
                
                return String.Concat(str_A, str_B);
            } return str;
        }
 
        private void SendInf()  // відправка інформації на порт тип STRING
        {
            alpha.mul_X = alpha.textBox_mull(textBox_multiX.Text, textBox_multiX.Enabled);
            alpha.mul_Y = alpha.textBox_mull(textBox_multiY.Text, textBox_multiY.Enabled);
            alpha.mul_XY = alpha.textBox_mull(textBox_multiXY.Text, textBox_multiXY.Enabled);
 
            alpha.summ_X = alpha.textBox_summ(textBox_summX.Text, textBox_summX.Enabled);
            alpha.summ_Y = alpha.textBox_summ(textBox_summY.Text, textBox_summY.Enabled);
            alpha.summ_XY = alpha.textBox_summ(textBox_summXY.Text, textBox_summXY.Enabled);
 
            alpha.X = (double)(alpha.X * alpha.mul_X * alpha.mul_XY) + alpha.summ_X + alpha.summ_XY;
            alpha.Y = (double)(alpha.Y * alpha.mul_Y * alpha.mul_XY) + alpha.summ_Y + alpha.summ_XY;
 
            if (!serialPort2.IsOpen)   //перевірка на відкритий порт
            {
                serialPort2.PortName = ((string)comboBox_COM_ports.SelectedItem);
                serialPort2.Open();
                richTextBox2.Text += ((string)comboBox_COM_ports.SelectedItem);
                richTextBox2.Text += " opened.\n";
            }
            if (serialPort2.IsOpen)  //відправляєм інфу
                richTextBox2.Text += String.Format("{0},{1}.00{2};{3}", ConverToString(alpha.X).Remove(3), ConverToString(alpha.Y).Remove(3), alpha.Z, alpha.end_msg);  //<<==== ОШИБКА ЗДЕСЬ. Подчеркивает точку с запятой, тоесть конец строки
                richTextBox2.Text += "\n";   
            serialPort2.Write(
                    String.Format("{0},{1}.00{2};{3}", ConverToString(alpha.X).Remove(3), ConverToString(alpha.Y).Remove(3), alpha.Z, alpha.end_msg));
        }
....
Текст ошибки:
Необработанное исключение типа "System.ArgumentOutOfRangeException" в mscorlib.dll Дополнительные сведения: startIndex должен быть меньше, чем длина строки.
Где может крытся баг?

Решение задачи: «Ошибка "startIndex должен быть меньше, чем длина строки."»

textual
Листинг программы
String.Format("{0},{1}.00{2};{3}", ConverToString(alpha.X).Length>4? ...

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы