Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637

Парсинг строки

14.11.2015, 18:24. Показов 1936. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток!

столкнулся с такой проблемой что странно отрекаются данные из строки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bool LoadTypeFiles()
{
    arrTypeFiles.clear();
    std::string filename = "_TypeFiles";
    std::ifstream inFile (filename); //создать поток
    if (!inFile.is_open()) return false;//проверить открыт ли файл
    std::string line;
    while (getline(inFile, line)) //прочитать строку
        {
        cout << line << endl;
        typef.Type       = line.substr(0, line.find(' ')); cout << typef.Type;
        typef.Name       = line.substr(typef.Type.size()+1, (typef.Type.size()+1)+line.find(' '));cout << " " << typef.Name;
        typef.GlobalType = line.substr(typef.Name.size()+1, (typef.Name.size()+1)+line.find(' '));cout << " " << typef.GlobalType;
        typef.Exclusion  = stoi(line.substr(line.find_last_of(' '), line.find(';')));cout << " " << typef.Exclusion<<endl;
        arrTypeFiles.push_back(typef);
        }
    inFile.close();
    return true;
}
вывод

Bash
1
2
3
4
avi Video Media 1; <- как прочитано
avi Video M o Media 1; 1 < - как записано
dmg Distrib Distrib_MAC 1;<- как прочитано
dmg Distrib rib Distrib 1 < - как записано
файл из которого читает
Bash
1
2
avi Video Media 1;
dmg Distrib Distrib_MAC 1;
почему так происходит даже не пойму(((
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.11.2015, 18:24
Ответы с готовыми решениями:

парсинг строки
Добрый день. Стоит задача - &quot;найти производную многочлена. Многочлен может быть большой, но только с неотрицательными целыми степенями и...

Парсинг строки С++
Ребят,нигде не нашел ничего дельного,прошу,чтобы натолкнули на мысль или объяснили что,да как. В общем на вход,к примеру,поступает строка...

Парсинг строки
Добрый день,подскажите, почему и как исправить у меня commands.c_str() - пустое ? Вот код: char comment; ...

4
 Аватар для igorrr37
2872 / 2019 / 991
Регистрация: 21.12.2010
Сообщений: 3,755
Записей в блоге: 9
14.11.2015, 20:13
Цитата Сообщение от Mesteriis Посмотреть сообщение
(typef.Type.size()+1)+line.find(' ')
вот это проверь
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
14.11.2015, 20:17  [ТС]
Так ну путем медитирование, распития вредных напитков и глаженьем кошки по животу, определил, что line.find начинает поиск с начало строки, если в строке все элементы отделены одним и тем же символом то возвращяется позиция первого нашедшего, соответственно из этого вопрос как заставить эту собаку начать поиск с места где закончился предыдущий а не с начало строки?

Добавлено через 1 минуту
igorrr37, ну почему так происходит, я уже понял не знаю как это исправить!

Добавлено через 1 минуту
Единсвенное что приходит в голову это откусывать из строки уже найденный элемент, но что то мне подсказывает что это не совсем правильно!
0
 Аватар для igorrr37
2872 / 2019 / 991
Регистрация: 21.12.2010
Сообщений: 3,755
Записей в блоге: 9
14.11.2015, 20:20
Лучший ответ Сообщение было отмечено Mesteriis как решение

Решение

line.find(' ', typef.Type.size() + 1) - (typef.Type.size() + 1)
замени на что то такое
1
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
14.11.2015, 20:48  [ТС]
igorrr37, Мерси

Добавлено через 21 минуту
Итого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool LoadTypeFiles()
{
    arrTypeFiles.clear();
    std::string filename = "_TypeFiles";
    std::ifstream inFile (filename); 
    if (!inFile.is_open()) return false;
    std::string line;
    while (getline(inFile, line)) 
        {
        cout << line << endl;
        int findDot=0;
        typef.Type       = line.substr(0, line.find(' ')); findDot=typef.Type.size()+1;
        typef.Name       = line.substr(findDot, line.find(' ', findDot) - findDot);findDot=findDot+typef.Name.size()+1;
        typef.GlobalType = line.substr(findDot, line.find(' ', findDot) - findDot);
        typef.Exclusion  = stof(line.substr(line.find_last_of(' '), line.find(';')));
        arrTypeFiles.push_back(typef);
        }
 
    inFile.close();
    return true;
}
Вдруг кому понадобится
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.11.2015, 20:48
Помогаю со студенческими работами здесь

Парсинг строки
Добрый день. Помогите с решением следующей задачи. На вход идет строка из 0 и 1, например, 110100011, нужно распарсить её на составляющие....

Парсинг строки с сайта
привет всем есть сайт и надо с сайта спарсить строчку &lt;p id=&quot;digital_date&quot;&gt;вот это надо спарсить&lt;/p&gt; зарание...

Быстрый парсинг строки
Всем доброго времени суток... Прошу разъяснить что делаю не так. Получаю строку вида, нужно ее обработать с минимальными задержками, по...

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

Парсинг строки с пробелами
Вообщем на выходе всего я получаю вот это : Вот сам файл script.csx: script dadada по идеи должно написать:


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru