Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

Как лучше всего парсить строку

13.01.2021, 22:22. Показов 1569. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как лучше всего парсить большую(около 1Мб текста). Есть что-то лучше чем впихнуть это в stringstream?
Строка это json и там надо выбрать значения по типу "name" : "somename" и "price" : "2000"
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.01.2021, 22:22
Ответы с готовыми решениями:

Как лучше всего разделить строку на несколько подстрок?
Есть строка вида параметр1*параметр2*параметр3*параметр4. Как разделить эту строку, чтобы получить в первой переменной параметр1, во...

Как парсить строку json?
есть строка (в текстовом файле): { {"k4" : 0.0},{"k3" : 0.0},{"k2" : 0.0},{"k1" : 0.0},{"k0" : 0.0},{"k" : 0.0},{"y4" :...

Чем проще всего парсить HTML документы?
Мне нужно из html доставать содержимое тега title и найти все ссылки. Какую библиотеку посоветуете??? Использовать QDomElement, SAX...

13
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
13.01.2021, 22:29
Цитата Сообщение от ReYalp Посмотреть сообщение
Как лучше всего парсить большую(около 1Мб текста). Есть что-то лучше чем впихнуть это в stringstream?
Загружать по частям, ~2-4Кб, и парсить вручную.
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
13.01.2021, 22:29
А разве нет уже готовых парсеров json?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
13.01.2021, 22:32
Цитата Сообщение от jugu Посмотреть сообщение
А разве нет уже готовых парсеров json?
https://github.com/nlohmann/json

Добавлено через 2 минуты
Только, вроде вопрос был не про парсеры json, а как наиболее эффективно распарсить файл
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
13.01.2021, 22:45
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
как наиболее эффективно распарсить файл
А, ну если файл, то, конечно же по кускам.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
13.01.2021, 22:47  [ТС]
jugu, строку и желательно без левых средств

Добавлено через 29 секунд
oleg-m1973, парсить вручную это как?)
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
13.01.2021, 22:54
Цитата Сообщение от ReYalp Посмотреть сообщение
oleg-m1973, парсить вручную это как?)
Загружаешь кусок строки, ищешь в нём перебором то, что тебе нужно.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
13.01.2021, 22:59  [ТС]
oleg-m1973, допустим, я могу разделить строку, а парсить то как? с помощью std::string::find?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
13.01.2021, 23:03
Цитата Сообщение от ReYalp Посмотреть сообщение
oleg-m1973, допустим, я могу разделить строку, а парсить то как? с помощью std::string::find?
Не очень понимаю, как ты соотносишь "около 1Мб текста" и std::string. Но принцип, примерное как в std::string::find
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
13.01.2021, 23:06  [ТС]
oleg-m1973, просто упустил слово строка
Цитата Сообщение от ReYalp Посмотреть сообщение
Как лучше всего парсить большую(около 1Мб текста)
имел ввиду большую строку
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
13.01.2021, 23:07
Там загружаешь из файла буфер char buf[2048] ищешь в нём свою строку, например, начинающуюся с кавычкы. Потом ищешь закрывающуюся кавычку. Если нашёл, то хорошо. Не нашел - сохраняешь остаток буфера куда-нибудь и начитываешь в тот же буфер следующий кусок.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
14.01.2021, 00:10
oleg-m1973, а почему не весь файл загружать целиком ?
Как по мне менее 10мб даже задумываться про дробление не стоит.

И чем плох std::string для текущей цели ?
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
14.01.2021, 00:34  [ТС]
SmallEvil,
Цитата Сообщение от SmallEvil Посмотреть сообщение
И чем плох std::string для текущей цели ?
ничем не плох , просто спросил какой подход более эфективен, использовать средства std::string или std::istringstream
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
14.01.2021, 21:35
Лучший ответ Сообщение было отмечено ReYalp как решение

Решение

эффективность бывает разная,
Скорость исполнения кода - читать в буфер , работать своими средствами, оптимизировать узкие места.
Скорость написания кода и его продвижения - стандартными (обернутые под конкретную задачу) средствами языка и STL.

Вот не проверял, но кажется мне что зарезервировав для строки память под весь размер файла и прочитав его.
Никаких нагрузок в этом месте быть не должно.
А дальше ограничение только Вашей фантазией.

Смотря какой формат файла, частично распарсить можно прямо при чтении, например по строкам.
(или тем же кавычкам "" по ; как в cpp файлах и т.д.)
Немного медленнее, но зато пол работы сделано ...

Если формат файла позволяет обработать за один проход, еще и форматированным вводом, то поток самое то. (basic_istream)

Добавлено через 4 минуты
при создании istringstream нужно учитывать что он делает копию строки для себя.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.01.2021, 21:35
Помогаю со студенческими работами здесь

Что лучше всего читать/смотреть где лучше всего практиковаться и как в принципе лучше всего учиться программированию
Здравствуйте,извините за вопрос не по теме но: уже около пол года изучаю С языки и начал понимать что я упустил некоторые моменты,не...

Где и как лучше всего хранить строку, которая будет подвергаться значительным изменениям
Добрый вечер. Пишу программу, которая использует строку и предполагает большое кол-во внесенных и изменений в данную строку. Насколько мне...

Как лучше парсить Excel
Допустим есть документ excel в нем один рабочий лист и на нем данные к примеру "я узнал что у меня" в одной ячейке. ...

Как лучше парсить HTML?
По сабжу - как лучше 'доставать' информацию с HTML страниц (довольно простая таблица), желательно без загружаемых компанент, хотя буду...

Как лучше парсить XML?
Есть файл XML <?xml version="1.0" encoding="UTF-8"?> <places xmlns="http://where.yahooapis.com/v1/schema.rng"...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru