Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60

Не получается конвертировать string в int

29.03.2013, 17:40. Показов 2957. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую форумчане.
Подскажите пжлста способ как исправить вот этот код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 public void ccc()
        {
            if (Regex.IsMatch(peremennay, "time[0-9]+:[0-9]+:[0-9]+"))
            {
                string pattern = @"time";
                foreach (string time in Regex.Split(peremennay, pattern))
                {
                    Regex.IsMatch(time, pattern);                    
                    timeserver = time;
                }
            }
            else if (Regex.IsMatch(peremennay, "as[-6-7]+"))
            {                               
                    string pattern1 = @"as";
                    foreach (string stavv in Regex.Split(peremennay, pattern1))
                    {
                        Regex.Match(stavv, pattern1);
                        {
                            rrtt = Convert.ToInt32(stavv); // явное преобразование строки в цифры со знаком и без                            
                            tmrShow24.Enabled = true; // включаем таймер
                        }
                    }
                }
            }
интересно что первая половина кода работает, а вторая нет!
C#
1
timeserver = time;
в основном коде выводит цифры на форму,
C#
1
tmrShow24.Enabled = true; // включаем таймер
таймер приводит в действие метод с помощью которого на форме рисуется что то зависящее от
C#
1
 rrtt = Convert.ToInt32(stavv); // явное преобразование строки в цифры со знаком
в общем нужно что бы переменная "rrtt" была int
но ничего не получается, компилятор через несколько секунд выдаёт исключение: "Входная строка имела неверный формат."
Советы: Убедитесь, что ваши аргументы метода имеют правильный формат.
При преобразовании строки в дату.время(Date Time) выполните синтаксический разбор строки, чтобы получить дату перед помещением каждой переменной в объект "Дата.время"(Date Time).
вот только при чём тут дата.время не понятно, первая половина примера работает!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.03.2013, 17:40
Ответы с готовыми решениями:

Dictionary<int,List<int>> и IReadOnlyDictionary<int,IReadOnlyList<int>>
Народ, столкнулся с такой ситуацией. Есть Переменная Dictionaty&lt;int,List&lt;int&gt;&gt; Dic = new...

Отсутствует аргумент, соответствующий требуемому параметру "code_model" из "TableAdapter.Insert(string, int?, int?, int?
Отсутствует аргумент, соответствующий требуемому параметру &quot;code_model&quot; из...

Dictionary<Tuple<string,string>, Dictionary<int,int>> dict - возможно ли?
Собственно вопрос в заголовке. Возможно ли использовать объект вида...

16
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
29.03.2013, 21:25
dreamorder, если хотите, чтобы вам помогали, во-первых говорите, что вам нужно, а не "этот код не работает. Исправьте", во-вторых нужно по-человечески имена называть, а не метод ccc, вызывающая регексп с peremennay, pattern1 , которые что-то конвертируют в rrtt и запускают tmrShow24
0
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60
29.03.2013, 21:31  [ТС]
Psilon, Ясно.
Получаю с сервера строку "as-7" или "as5" и т.д., в общем символы "as" всегда идут перед числами от -10 до 10,
мне надо эти числа прибавлять математически к другим цифрам, но в примере выше не получается вытаскивать эти символы из строки с сервера и конвертировать в int
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
29.03.2013, 21:36
dreamorder,
C#
1
2
3
4
int GetIntFromServer(string data)
{
   return int.Parse(data.Substring(2));
}
2
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60
29.03.2013, 21:40  [ТС]
конечно с сервера не только это идёт, получаемые строки очень разные.
вообще пытаюсь таким образом посылать определённые команды в клиент.

Добавлено через 4 минуты
Psilon, Большое спасибо!
можно подробнее, как сделать так, что бы в одном методе можно было парсить и вытаскивать нужные символы, что бы получилось около 12-20 различных вариантов?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
29.03.2013, 22:05
dreamorder, ну так напишите какие строки, я не экстрасенс... Ну разве что чуточку.
0
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60
29.03.2013, 22:22  [ТС]
строки команд для запуска методов будут почти однотипные то есть "буквы+цифры" и наоборот, но их будет достаточно много, как можно сделать отбор этих команд в одной функции?
к примеру из "top1" отбираю "1" - включаю таймер, из "12gt" требуется вытащить 12 как цифру и так несколько раз.
не ругайтесь сильно(я ещё новичок), но что то я не понял куда и как применить данный Вами пример выше?

вот клиент:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
//  public string[] peremennay;               
        // Будет хранить имя пользователя
        private string UserName = "еее";
        private StreamWriter swSender;
        private StreamReader srReceiver;
        private TcpClient tcpServer;
        // Необходимо обновить форму с сообщениями из другого потока
        private delegate void UpdateLogCallback(string strMessage);
        // Необходимо установить форму в "отключенном» состоянии из другого потока
        private delegate void CloseConnectionCallback(string strReason);
        private Thread thrMessaging;
        private IPAddress ipAddr;
        private bool Connected;
 
 
        public void Client()
        {
            // На выходе из приложения, не забудьте отключить первый
            Application.ApplicationExit += (OnApplicationExit);
            InitializeComponent();
        }
 
        //  для выхода из приложения
        public void OnApplicationExit(object sender, EventArgs e)
        {
            //  if (Connected == true)
            //   {
            // Закрывает соединения, потоки, и т.д.
            Connected = false;
            swSender.Close();
            srReceiver.Close();
            tcpServer.Close();
            //   }
        }
 
        public void ConnectedS1()
        {
            // Если мы сейчас не подключены, но в ожидании подключения
            if (Connected == false)
            {
                // Инициализация связи
                InitializeConnection();
            }
            else // Мы связаны, таким образом, отсоедините
            {
                CloseConnection("Disconnected at user's request.");
            }
        }
 
        private void InitializeConnection()
        {
            try
            {
                // Разбор IP-адреса из TextBox в IP-адрес объекта
                ipAddr = IPAddress.Parse(textBoxIPServera.Text);
                // Начало нового соединения TCP для чат-сервера
                tcpServer = new TcpClient();
                tcpServer.Connect(textBoxIPServera.Text, 1100);
 
                // Помогает нам отслеживать ли мы связаны или нет
                Connected = true;
                // Подготовьте форму
                UserName = textBoxNickNames.Text;
 
                // Отключить и включить в соответствующие поля
                textBoxIPServera.Enabled = false;
                textBoxNickNames.Enabled = false;
                textBoxVvodChat.Enabled = true;
                EnterSend.Enabled = true;
                ConnectedS.Text = "Disconnect";
 
                // Отправить желаемое имя пользователя на сервере
                swSender = new StreamWriter(tcpServer.GetStream());
                swSender.WriteLine(textBoxNickNames.Text);
                swSender.Flush();
 
                // Начало нити для получения сообщений и дальнейшее общение
 
                thrMessaging = new Thread(new ThreadStart(ReceiveMessages));
                thrMessaging.Start();
 
            }
            catch (Exception)
            {
                MessageBox.Show("Нет соединения с сервером");
            }
        }
 
 
        private void ReceiveMessages()
        {
            // Получить ответ от сервера
            srReceiver = new StreamReader(tcpServer.GetStream());
            // Если первый символ в ответ равен 1, соединение было успешным
            string ConResponse = srReceiver.ReadLine();
            // Если первый символ равен 1, соединение было успешным
            if (ConResponse[0] == '1')
            {
                // Обновите форму, чтобы сказать ему мы теперь связаны
                this.Invoke(new UpdateLogCallback(this.UpdateLog), new object[] {"Connected Successfully!"});
 
            }
            else // Если первый символ не является 1 (возможно, 0), связь была неудачной
            {
                string Reason = "Not Connected: ";
                // Извлечение причине из ответного сообщения.Причина начинается с 3-го символа
                Reason += ConResponse.Substring(2, ConResponse.Length - 2);
                // Обновление формы с причиной, почему мы не могли соединиться
                this.Invoke(new CloseConnectionCallback(this.CloseConnection), new object[] {Reason});
                // Выход из метода
                return;
            }
 
 
            // Пока мы успешно подключились, читать входящие линии с сервера
            while (Connected)
            {
                if (Connected)
                {
                    try
                    {
                        data = srReceiver.ReadLine();                        
                        // Показать сообщения в журнале TextBox
                        this.Invoke(new UpdateLogCallback(this.UpdateLog), new object[] {data});                    
                    }
                    catch (Exception) // ex)
                    {
                        swSender.Close();
                        srReceiver.Close();
                        tcpServer.Close();
                        //  MessageBox.Show("Нет соединения с сервером"); // или так - //(ex.Message);
                    }
                }
                else
                {
                    break;
                }
            }
        }
 
        // Этот метод вызывается из другого потока, чтобы обновить журнал TextBox
        private void UpdateLog(string strMessage)
        {
            // Добавить текст также свитки TextBox на дно каждый раз
            textBoxLogChat.AppendText(strMessage + "\r\n");
        }
 
        // Закрывает текущее соединение
        private void CloseConnection(string Reason)
        {
            // Показать причине соединение заканчивается
            textBoxLogChat.AppendText(Reason + "\r\n");
            // Включить и отключить соответствующие элементы управления на форму
            textBoxIPServera.Enabled = true;
            textBoxNickNames.Enabled = true;
            textBoxVvodChat.Enabled = false;
            EnterSend.Enabled = false;
            ConnectedS.Text = "Connect";
 
            // Close the objects
            Connected = false;
            swSender.Close();
            srReceiver.Close();
            tcpServer.Close();
        }
 
        // Отправка сообщения набрали на сервер
        private void SendMessage()
        {
            if (textBoxVvodChat.Lines.Length >= 1)
            {
                swSender.WriteLine(textBoxVvodChat.Text);
                swSender.Flush();
                textBoxVvodChat.Lines = null;
            }
            textBoxVvodChat.Text = "";
        }
 
        // Мы хотим, чтобы отправить сообщение, когда Send нажатии кнопки
        //   private void EnterSend_Click(object sender, EventArgs e)
        //   {
        //        SendMessage();
        //   }
 
        // Но мы также хотим, чтобы отправить сообщение один раз Enter нажат
        private void txtMessage_KeyPress(object sender, KeyPressEventArgs e)
        {
            // Если клавиша Enter
            if (e.KeyChar == (char) 13)
            {
                SendMessage();
            }
        }
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
29.03.2013, 22:24
dreamorder, имеется строка с каким-то текстом и числом, необходимо достать число из любого места в строке - так? Кроме того: может ли быть число только целым или нет?
0
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60
29.03.2013, 22:30  [ТС]
да, так как все символы и порядок их в строке будут известны заранее, надо просто отличить к примеру "1" из одной строки и "1" из другой строки, известно что "1" будет идти сразу после определённых символов букв, таким образом должны получиться различные команды.

Добавлено через 1 минуту
числа будут целые, но со знаками минус от -10 до 10 включая ноль вот как раз мучаюсь сейчас как указать -10до10 в
C#
1
 if (Regex.IsMatch(peremennay, "as[-10-10]+"))
так не правильно вроде бы
0
19 / 19 / 5
Регистрация: 16.09.2012
Сообщений: 80
29.03.2013, 23:21
Нет такого [-10-10] в регулярных выражениях, этот элемент паттерна "работает с одним символом", тоесть ты можешь уразать [0-5] он и проверит, в радиусе ли от нуля до 5-и.
Тоесть тебе надо что-то вроде этого:
C#
1
Regex.IsMatch(@"as-7", "as-?[0-9]{1,2}");
(уверен, есть и лучше способы)
Потом получить число, преобразовать его в int и проверить, не выходит ли он за допустимый диапазон.
Нашел тут ссылку тебе: http://www.rsdn.ru/article/alg/regular.xml
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
29.03.2013, 23:38
"as-?\d\d"
0
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60
29.03.2013, 23:42  [ТС]
C#
1
else if (Regex.IsMatch(peremennay, @"as-?\d\d"))
не работает "as-?\d\d"
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
29.03.2013, 23:44
as - нужно или нужны только цифры? Если нужно, то
"as-?\d+"
0
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60
30.03.2013, 00:18  [ТС]
as - указывает для чего эти цифры, в данном случае тут как раз надо их конвертировать в int и прибавить к другим числам.
хотя проблему с конвертацией вроде бы решил своим методом, что то вроде этого:
C#
1
2
3
4
5
6
7
8
9
10
11
12
            if (aqw == "1")
            {
                rrtt = 1;
            }
            else if (aqw == "2")
            {
                rrtt = 2;
            }
            else if (aqw == "3")
            {
                rrtt = 3;
            } // и т.д.
Добавлено через 3 минуты
никак не могу распознать строку "as[-10-10]"

Добавлено через 25 минут
вот рабочий вариант -
C#
1
if (Regex.IsMatch(peremennay, @"(as-?([0-9])|([0-9]))"))

от -9 до 9
0
19 / 19 / 5
Регистрация: 16.09.2012
Сообщений: 80
30.03.2013, 00:37
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Program
    {
        static void foo(string mod, int value)
        {
            Console.WriteLine("Modify: " + mod + "\nValue: " + value);
        }
        static void Main(string[] args)
        {
 
            if (Regex.IsMatch(@"as-7", @"as-?[0-9]{1,2}"))
            {
                int value = Int16.Parse(Regex.Match(@"as-7", @"-?\d{1,2}").Value);
                string mod = Regex.Match(@"as-7", @"\w+").Value;
                if (value >= -10 && value <= 10)
                {
                    foo(mod, value);
                }
            }
        }
    }
Результат:
Modify: as
Value: -7

Не умею регулярные выражения, не знаю как достать из входной строки части, но будет работать примерно так.
1
 Аватар для dreamorder
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 60
30.03.2013, 01:52  [ТС]
rejjin, Спасибо за пример.
0
19 / 19 / 5
Регистрация: 16.09.2012
Сообщений: 80
30.03.2013, 02:49
Цитата Сообщение от dreamorder Посмотреть сообщение
rejjin, Спасибо за пример.
Всегда пожалуйста, это же и мне даёт практику.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.03.2013, 02:49
Помогаю со студенческими работами здесь

Ошибки: Cannot implicitly convert type 'string' to 'int' и Argument 1: cannot convert from 'int' to 'string'
youtube.com_Пишем парсер на Csharp. Ошибка Пытаюсь написать парсер. Вроде сделал всё как в...

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Здравствуйте! По C# есть задачка, с которой я так и не разобрался :( Задача: Создайте...

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population....

Как конвертировать "int?" в "int"
Ошибка 1 Не удается неявно преобразовать тип &quot;int?&quot; в &quot;int&quot;. Существует явное преобразование...

Как конвертировать коллекцию List<int> в int[]?
Как конвертировать коллекцию List&lt;int&gt; в массив int без использования цикла? То есть существует...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru