Ошибка "startIndex должен быть меньше, чем длина строки." - C#
Формулировка задачи:
Доброго времени суток!
Задача такая: "Достать из файла координаты x,y и z, преобразовать в некую строку, которую отправить последовательным портом."
Читаемые строки из файла имеют вот такой вид:
У меня все отлично работает пока не считает вот эту строку:
Зависает на обработке "Y".
Вот код:
Текст ошибки:
Где может крытся баг?
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
...
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? ...