Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для OpenGoodwin
7 / 7 / 3
Регистрация: 15.01.2014
Сообщений: 459

Разбиение строки на подстроки

01.07.2015, 13:33. Показов 2551. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите, пожалуйста, разбить строку

Code
1
5 | wargaming-ix.giganet.ua[91.245.221.128] | 28 ms
и записать разбитые данные в 4 переменных типа string

В переменной #1 должно быть число 5
В переменной #2 должен быть текст wargaming-ix.giganet.ua
В переменной #3 должен быть текст 91.245.221.128
В переменной #4 должен быть текст 28 ms

такая строка не одна, их много. Они все подобные выше указанной и имеют формат записи

Code
1
число | текст[текст] | текст
Буду весьма благодарен за скорую помощь. Спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.07.2015, 13:33
Ответы с готовыми решениями:

Разбиение строки на подстроки по split с сохранением разделителей
Такой вопрос - методы Split() разбивает строку на подстроки не включая разделители, а мне нужно чтобы разделители включались. Т.е. при...

Разбиение строки на подстроки, в качестве делиметра - символ табуляции
Имеется N строк типа string, имеющих следующий вид : "int char int float int", например, "998 G 30 0.0538958973815 ...

Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0
Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0 . Если совпадающих подстрок нет, то вывести строку S без изменений

12
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
01.07.2015, 13:52
Лучший ответ Сообщение было отмечено OpenGoodwin как решение

Решение

C#
1
2
3
4
5
6
7
8
string str = @"5 | wargaming-ix.giganet.ua[91.245.221.128] | 28 ms";
char[] charr = new char[]{ '[', ']', '|' };
string[] strarr = str.Split(charr, StringSplitOptions.RemoveEmptyEntries);
int n = int.Parse(strarr[0]);
//или если нужна строка string n = strarr[0].Trim(); 
string url = strarr[1].Trim();
string ip = strarr[2].Trim();
string time = strarr[4].Trim();
1
28 / 28 / 15
Регистрация: 26.11.2014
Сообщений: 57
01.07.2015, 13:55
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            string s = "5 | wargaming-ix.giganet.ua[91.245.221.128] | 28 ms";
            string x1 = s.Remove(s.IndexOf("|"));
            string x2 = s.Remove(0,(s.IndexOf("|")+1));
            x2 = x2.Remove(x2.IndexOf("["));
            string x3 = s.Remove(0, (s.IndexOf("[") + 1));
            x3 = x3.Remove(x3.IndexOf("]"));
            string x4 = s.Remove(0,s.LastIndexOf("|")+1);
 
            MessageBox.Show(s);
            MessageBox.Show(x1);
            MessageBox.Show(x2);
            MessageBox.Show(x3);
            MessageBox.Show(x4);
1
82 / 82 / 24
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
01.07.2015, 13:56
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
    class Program
    {
        struct ParseData
        {
            public int num;
            public string host;
            public string ip;
            public string time;
        }
 
        static void Main(string[] args)
        {
            string str = "5 | wargaming-ix.giganet.ua[91.245.221.128] | 28 ms";
            ParseData data;
            string[] raw = str.Split('|');
            try
            {
                data.num = Int32.Parse(raw[0].Trim());
                data.host = raw[1].Substring(0, raw[1].IndexOf("[") - 1);
                data.ip = raw[1].Substring(raw[1].IndexOf("[") + 1, (raw[1].IndexOf("]") - 1) - (raw[1].IndexOf("[") + 1));
                data.time = raw[2].Trim();
 
                Console.WriteLine("{0} {1}:{2} {3}", data.num, data.host, data.ip, data.time);
                Console.ReadKey();
            }
            catch (Exception ex)
            {
                //Ooooppsss
            }
        }
    }
1
 Аватар для OpenGoodwin
7 / 7 / 3
Регистрация: 15.01.2014
Сообщений: 459
01.07.2015, 14:05  [ТС]
Даценд, попробовал этот код. Спасибо, но есть ошибка, суть которой я не очень понимаю.

C#
1
string time = strarr[4].Trim();
Исключение "Индекс находился вне границ массива"

Что-то, видимо, здесь не так.

C#
1
char[] charr = new char[] { '[', ']', '|' };
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
01.07.2015, 14:12
OpenGoodwin,
ошибка возникнет, если в строке между ] и | нет пробела, т.е.:
5 | wargaming-ix.giganet.ua[91.245.221.128]нет_пробела| 28 ms.
Одинаков ли формат строки, т.е. в каждой ли строке есть пробел на этом месте?
0
 Аватар для OpenGoodwin
7 / 7 / 3
Регистрация: 15.01.2014
Сообщений: 459
01.07.2015, 14:18  [ТС]
Даценд, вот, записал сейчас цельную, не разбитую, строку в richTextBox. Получилось такое. Везде пробелы есть.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1 | 192.168.1.1 | 12 ms
 
2 | gw-c7604.lan.ua[92.249.102.1] | 3 ms
 
3 | sce2020-1-sub.lan.ua[31.43.120.226] | 2 ms
 
4 | out.ua-ix.lan.ua[92.249.120.249] | 2 ms
 
5 | wargaming-ix.giganet.ua[91.245.221.128] | 22 ms
 
6 | linx-a9006-edge-1-be-20-201.wargaming.net[92.223.122.73] | 23 ms
 
7 | dtln-n5548-fe-1-vl252.wargaming.net[92.223.122.203] | 20 ms
 
8 | dt-sl-a129.worldoftanks.ru[92.223.19.129] | 20 ms
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
01.07.2015, 14:21
OpenGoodwin,
первая строка совершенно другого формата.
Т.е. не
число | текст[текст] | текст
а
число | текст | текст
0
 Аватар для OpenGoodwin
7 / 7 / 3
Регистрация: 15.01.2014
Сообщений: 459
01.07.2015, 14:52  [ТС]
Даценд, пересмотрел свой код.

Вот что получается.

C#
1
2
3
4
5
return string.Format("{0} | {1} | {2}",
                HopID,
                string.IsNullOrEmpty(Hostname) ? Address : Hostname + "[" + Address + "]",
                ReplyStatus == IPStatus.TimedOut ? "Request Timed Out." : ReplyTime.ToString() + " ms"
                );
Ошибка была здесь.

C#
1
string.IsNullOrEmpty(Hostname) ? Address : Hostname
Вот, что я придумал:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public override string ToString()
        {
            if (Hostname == "")
            {
                return string.Format("{0} | {1} | {2}", HopID, "-" + "[" + Address + "]", ReplyStatus == IPStatus.TimedOut ? "-" : ReplyTime.ToString() + " ms"
                );
            }
            else
            {
                return string.Format("{0} | {1} | {2}",
                    HopID,
                    string.IsNullOrEmpty(Hostname) ? Address : Hostname + "[" + Address + "]",
                    ReplyStatus == IPStatus.TimedOut ? "-" : ReplyTime.ToString() + " ms"
                    );
            }
        }
Всем большое спасибо за помощь Всех "поблагодарил"
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
01.07.2015, 15:35
OpenGoodwin,
Как вариант использовать регулярку
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
               public static void Main(string[] args)
        {
            string[] str =
            {
                "1 | 192.168.1.1 | 12 ms",
                "2 | gw-c7604.lan.ua[92.249.102.1] | 3 ms ",
                "3 | sce2020-1-sub.lan.ua[31.43.120.226] | 2 ms ",
                "4 | out.ua-ix.lan.ua[92.249.120.249] | 2 ms",
                "5 | wargaming-ix.giganet.ua[91.245.221.128] | 22 ms ",
                "6 | linx-a9006-edge-1-be-20-201.wargaming.net[92.223.122.73] | 23 ms ",
                "7 | dtln-n5548-fe-1-vl252.wargaming.net[92.223.122.203] | 20 ms ",
                "8 | dt-sl-a129.worldoftanks.ru[92.223.19.129] | 20 ms"
            };
 
            string pattern = @"^(?<HopId>\d+)\s\|\s(?<Url>[\w\d_\.-]+)(?:\[(?<IP>.*?)\])?\s\|\s(?<Time>\d+\s\w+)\s*$";
 
            foreach (var s in str)
            {
                Match b = Regex.Match(s,pattern);
 
                Console.WriteLine(b.Groups["HopId"]);
                Console.WriteLine(b.Groups["Url"]);
                Console.WriteLine(b.Groups["IP"]);
                Console.WriteLine(b.Groups["Time"]);
            }
        }
0
 Аватар для Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
01.07.2015, 20:15
Не совсем понял возникшие сложности.
C#
1
2
3
string line = @"1 | 192.168.1.1 | 12 ms";//1 | 192.168.1.1 | 12 ms //5 | wargaming-ix.giganet.ua[91.245.221.128] | 28 ms
string[] separator = { " | ", "[", "]"};
string[] result = line.Split(separator, StringSplitOptions.RemoveEmptyEntries);
0
 Аватар для OpenGoodwin
7 / 7 / 3
Регистрация: 15.01.2014
Сообщений: 459
01.07.2015, 20:49  [ТС]
Ieroglif, я специально просил разбить мне одну строку на 4 разных. Потому, что потом мне нужно впихнуть эти 4 строки в 4 разных ячейки dataGridView

Вот на такой код я и рассчитывал в конце

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void AddData(params string[] items)
        {
            if (dataGridView1.InvokeRequired) dataGridView1.Invoke(new Action(() => dataGridView1.Rows.Add(items)));
        }
 
foreach (var entry in Tracert(IP, 30, 5000))
            {
                string str = entry.ToString() ;
                char[] charr = new char[] { '[', ']', '|' };
                string[] strarr = str.Split(charr, StringSplitOptions.RemoveEmptyEntries);
                int n = int.Parse(strarr[0]);
                string url = strarr[1].Trim();
                string ip = strarr[2].Trim();
                string time = strarr[4].Trim();
                AddData(n.ToString(), url, ip, time);
            }
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
01.07.2015, 20:54
Цитата Сообщение от OpenGoodwin Посмотреть сообщение
int n = int.Parse(strarr[0]);
Чтобы не конвертировать обратно в строку, лучше
C#
1
string n = strarr[0].Trim();
после можно
C#
1
AddData(n, url, ip, time);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.07.2015, 20:54
Помогаю со студенческими работами здесь

Разбиение строки
есть к примеру в файле есть такие строки: 1,а,б 2,ввап,ииьб нужно разобрать каждую строку, т.е. сначала до первой запятой, потом от...

Разбить файл на строки, а строки - на подстроки
Подскажите пожалуйста. У меня есть файл. В нем много строк. Суть в том, что в этих строках после символа ^^ идет дата формата ЧЧ.ММ.ГГ....

Разбиение строки на шинглы
Здравствуйте. Пытаюсь реализовать алгоритм Шинглов, но возникла трудность: я не знаю как разбить текст на шинглы. Точнее, принцип разбиения...

Разбиение строки на числа
Ситуация такая: сторонняя программа, после подсчетов записывает числа в строку, и я хотел бы записать их в массив чисел. Вот пример такой...

Разбиение строки на символы
Доброго времени суток, интересует такой вопрос. Если есть строка str=&quot;привет&quot;, а мне нужно вывести как &quot;п р и в е т&quot;. Почему...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru