Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
9 / 9 / 8
Регистрация: 10.04.2013
Сообщений: 58

Парсинг файла для получения точек траектории

28.04.2014, 21:08. Показов 734. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем вечера =)

Ребята, подскажите как попроще решить следующую задачу (я только прочитал книжку и это моя первая задача, решаемая средствами C# ):
Во входном файле есть вот такой набор строк:
Кликните здесь для просмотра всего текста

Cut1_Pnt1={x 10, y 10}
Cut1_Pnt2={x 11, y 10}
Cut1_Pnt3={x 12, y 10}
Cut1_Pnt4={x 13, y 10}
Cut2_Pnt1={x 14, y 10}
Cut2_Pnt2={x 15, y 10}
Cut2_Pnt3={x 16, y 10}
Cut2_Pnt4={x 17, y 10}
Cut2_Pnt5={x 18, y 10}
Cut3_Pnt1={x 19, y 10}
Cut3_Pnt2={x 20, y 10}
Cut3_Pnt3={x 21, y 10}
Cut3_Pnt4={x 22, y 10}
Cut3_Pnt5={x 23, y 10}
Cut3_Pnt6={x 24, y 10}

То есть Cut - участок траектории, Pnt - точки траектории, числа - индексы, означающие номер участка и номер точки, соответственно. Количества участков и точек на каждом участке - переменные, но обязательно должны представлять собой натуральный ряд чисел и начинаться с 1.

На выходе необходимо получить файл, содержащий:
Кликните здесь для просмотра всего текста

Pnt[1,1]={x 10, y 10}
Pnt[1,2]={x 11, y 10}
Pnt[1,3]={x 12, y 10}
Pnt[1,4]={x 13, y 10}
Pnt[2,1]={x 14, y 10}
Pnt[2,2]={x 15, y 10}
Pnt[2,3]={x 16, y 10}
Pnt[2,4]={x 17, y 10}
Pnt[2,5]={x 18, y 10}
Pnt[3,1]={x 19, y 10}
Pnt[3,2]={x 20, y 10}
Pnt[3,3]={x 21, y 10}
Pnt[3,4]={x 22, y 10}
Pnt[3,5]={x 23, y 10}
Pnt[3,6]={x 24, y 10}


Как я решил задачу (вот чувствую что наговнокодил):

Кликните здесь для просмотра всего текста


1. Создал класс координат Coords и статичный метод ParseXY.
2. Создал словарь Dictionaray<string, Coords> Cut_pnt, где в ключ засунул имена точек (CutN_PntM).
3. Создал List<int> чтобы наложить туда индексы при Cut.
Пробежался по словарю форичем и с помощью регекса наполнил List, потом его отсортировал по возрастанию, проверил нет ли нарушения последовательности и начинается ли он с единички, максимальный член запомнил в переменной int Cut_count.
4. Вот тут начались чудеса =) Создал массив Листов, List<int>[Cut_count], поступил с элементами массива как и с Cut'ом, отрегексил, сортирнул, проверил, нашел максимумы int maxs[Cut_count].
5. Создал ступенчатый массив, первым индексом которого служит [Cut_count], а вторым int maxs[Cut_count]
6. Еще раз форичами и регексами пробежал по словарю Cut_pnt и рассовал элементы в ступенчатый массив согласно индексам.
7. Вывел массив в текст.


0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.04.2014, 21:08
Ответы с готовыми решениями:

Чтение XML файла и его парсинг для получения всех URL
Добрый день! Из интернета получаю XML данные - &lt;response list=&quot;true&quot;&gt; - &lt;audio&gt; &lt;aid&gt;150993468&lt;/aid&gt; ...

Парсинг JSON для получения даты
Прошу помощи у гуру. Делаю афишу, нашел где брать jason ответ от сервера, правда с кучей лишней инфой, смог отсортировть до такого ответа...

Парсинг строки для получения значений в кавычках
Всем доброго дня. Хочу спросить у уважаемого сообщества как распарсить такую строку &quot;asd&quot;,&quot;asa&quot;,&quot;&quot;,,,. Какой...

3
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
28.04.2014, 21:27
Не читал всё, что Вы делали, но тут 1 регекса хватит...
Принцип, думаю, поймёте:
C#
1
2
            string sOld = "Cut1_Pnt1={x 10, y 10}";
            string sNew = new Regex(@"Cut(\d+)_Pnt(\d+)=(.*)").Replace(sOld, "Pnt[$1,$2]=$3");
1
9 / 9 / 8
Регистрация: 10.04.2013
Сообщений: 58
28.04.2014, 21:41  [ТС]
Spawn, спасибо.

Но, тем не менее, полученные новые строки нужно будет проверять на "Количества участков и точек на каждом участке - переменные, но обязательно должны представлять собой натуральный ряд чисел и начинаться с 1."
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
28.04.2014, 22:03
Это уже логика
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.04.2014, 22:03
Помогаю со студенческими работами здесь

Парсинг текста для получения значений в блоках <div>
Доброго времени суток. Ни в парсинге, ни в регулярках вообще никак... Попытки получить значение между тэгами &lt;div...

HtmlAgilityPack парсинг таблицы для получения текста, даты и описания статуса
Здравствуйте, не могу разобраться с библиотекой HtmlAgilityPack. В примерах, которые нашел идет поиск элементов с помощью ID. Как можно...

Получения файла *.com из файла *.тхт в кодировке ASCII для корректного рисования через псевдографику
Здравствуйте , задача: Создать программу типа .COM, которая в текстовом режиме выводит с помощью псевдографики изображения заданного...

Парсинг XML значений для получения значений Double
Всем добрый день. Есть XML файл в котором нужно спарсить значения double. Подскажите пожалуйста как можно спарсить через...

Подгрузка файла для получения списка слов для замены
На странице есть определенное количество полей с одинаковым текстом, нужно заменить этот текст на уникальный для каждого поля. Я думаю,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru