Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2012, 10:43   #1
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию [C#] Индекс находился вне границ массива

Здравствуйте, пишу что-то наподобие интерпретатора команд.
Код:
string interpreter = textBox1.Text;
            // Give запрос
            string[] give = interpreter.Split(new string[1] { "> " }, StringSplitOptions.None);
            string[] massivegive = give[1].Split(new string[1] { "(" }, StringSplitOptions.None);
            // Get запрос
            string[] get = interpreter.Split(new string[1] { "< " }, StringSplitOptions.None);
            string[] massiveget = get[1].Split(new string[1] { "(" }, StringSplitOptions.None);
            // Парсинг Give/Get запросов
            if (massiveget[0] == "getUser")
            {
                string[] data = massiveget[1].Split(new string[1] { "\"" }, StringSplitOptions.None);
                string[] type = data[1].Split(new string[1] { "\", " }, StringSplitOptions.None);
                string[] id = type[1].Split(new string[1] { ");" }, StringSplitOptions.None);
                MessageBox.Show("Тип: " + type[0] + "\nID:" + id[0]);
                
            }
Но при запуске вылезает ошибка "Индекс находился вне границ массива", подскажите как исправить.
Заранее спасибо.
JonMagon вне форума Ответить с цитированием
Старый 22.01.2012, 12:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А на какой хоть строчке выбивает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.01.2012, 13:12   #3
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию

Ах, если бы я мог бы из-под дебага его запускать, но нет.
Путем удаления частей кода, я понял что ошибка в этих строках
Код:
string[] get = interpreter.Split(new string[1] { "< " }, StringSplitOptions.None);
            string[] massiveget = get[1].Split(new string[1] { "(" }, StringSplitOptions.None);
Но где, понять не могу. Собственно должно все работать как часы, но ему что-то не нравится.
JonMagon вне форума Ответить с цитированием
Старый 22.01.2012, 13:45   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
если бы я мог бы из-под дебага его запускать, но нет.
А че? Дебаггер отключили за неуплату?
Цитата:
get[1]
Кстати ты не проверяешь сколько строк в массиве get, может их там вообще нет.
И кстати get - слово зарезервированное насколько я помню, не стоит его использовать в виде имени переменки.
I'm learning to live...

Последний раз редактировалось Stilet; 22.01.2012 в 13:47.
Stilet вне форума Ответить с цитированием
Старый 22.01.2012, 13:54   #5
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию

Stilet, спасибо за ответ. Постраюсь что-нибудь сделать, чуть позже отпишусь.
JonMagon вне форума Ответить с цитированием
Старый 22.01.2012, 14:13   #6
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию

Все равно не работает.
Хотя все правильно.
JonMagon вне форума Ответить с цитированием
Старый 22.01.2012, 14:47   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так а насчет неуплаты за отладчик?
Деньжат чтоль подкинуть?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.01.2012, 15:34   #8
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию

Отладчик не работает, выдает мол это дллька о_О
Но в нем особой проблемы нет, прога то все равно компилится.

Кажется нашел проблему, действительно, получается что массив становится пустой.

ах, нет, все равно, может не правильно делаю, но проверяю так
Код:
            string interpreter = textBox1.Text;
            string[] massivegive = null;
            string[] massiveget = null;
            // Give запрос
            string[] give = interpreter.Split(new string[1] { "> " }, StringSplitOptions.None);
            if (give[1] != null)
            {
                massivegive = give[1].Split(new string[1] { "(" }, StringSplitOptions.None);
            }
            // Get запрос
            string[] get = interpreter.Split(new string[1] { "< " }, StringSplitOptions.None);
            if (get[1] != null)
            {
                massiveget = get[1].Split(new string[1] { "(" }, StringSplitOptions.None);
            }
            // Парсинг Give/Get запросов
            if (massiveget[0] == "getUser")
            {
                string[] data = massiveget[1].Split(new string[1] { "\"" }, StringSplitOptions.None);
                string[] type = data[1].Split(new string[1] { "\", " }, StringSplitOptions.None);
                string[] id = type[1].Split(new string[1] { ");" }, StringSplitOptions.None);
                MessageBox.Show("Тип: " + type[0] + "\nID:" + id[0]);
                
            }
Сформулирую вопрос по другому, как проверить существует ли get[1]?
Есть ли аналог функции isset() PHP в C#?

Последний раз редактировалось Stilet; 22.01.2012 в 21:09.
JonMagon вне форума Ответить с цитированием
Старый 22.01.2012, 16:44   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
if (give[1] != null)
Если не ошибает память проверку лучше делать так:
Код:
if (give.length>=1)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.01.2012, 20:03   #10
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию

Все равно ошибка
Я правда сделал
Код:
if (give[1].Length>=1)
Т.к. give всегда будет иметь более 0 символов.
Как же решить данную проблему?
JonMagon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование строки в индекс массива WOWka777 Общие вопросы C/C++ 5 21.03.2011 16:36
"Индекс вне границ массива". Строки. (Проблема еще не решена) Broken Angel Помощь студентам 5 18.01.2011 21:33
C# ошибка:"Индекс находился вне границ массива" potap88 Помощь студентам 16 18.04.2010 15:50
паскаль. индекс элемента массива belka1 Помощь студентам 2 09.01.2010 03:58
паскаль.найти индекс элемента массива belka1 Помощь студентам 6 13.11.2009 19:40