Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Mesteriis
379 / 162 / 51
Регистрация: 08.08.2015
Сообщений: 1,148
Завершенные тесты: 1
#1

Парсинг строки - C++

14.11.2015, 18:24. Просмотров 353. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2015, 18:24
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Парсинг строки (C++):

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

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

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

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

Парсинг строки по пробелам
Делаю консоль. Написал парсер команд: string command = {&quot;&quot;}; int i = 0;...

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

4
igorrr37
1863 / 1481 / 749
Регистрация: 21.12.2010
Сообщений: 2,473
Записей в блоге: 11
14.11.2015, 20:13 #2
Цитата Сообщение от Mesteriis Посмотреть сообщение
(typef.Type.size()+1)+line.find(' ')
вот это проверь
0
Mesteriis
379 / 162 / 51
Регистрация: 08.08.2015
Сообщений: 1,148
Завершенные тесты: 1
14.11.2015, 20:17  [ТС] #3
Так ну путем медитирование, распития вредных напитков и глаженьем кошки по животу, определил, что line.find начинает поиск с начало строки, если в строке все элементы отделены одним и тем же символом то возвращяется позиция первого нашедшего, соответственно из этого вопрос как заставить эту собаку начать поиск с места где закончился предыдущий а не с начало строки?

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

Добавлено через 1 минуту
Единсвенное что приходит в голову это откусывать из строки уже найденный элемент, но что то мне подсказывает что это не совсем правильно!
0
igorrr37
1863 / 1481 / 749
Регистрация: 21.12.2010
Сообщений: 2,473
Записей в блоге: 11
14.11.2015, 20:20 #4
Лучший ответ Сообщение было отмечено Mesteriis как решение

Решение

line.find(' ', typef.Type.size() + 1) - (typef.Type.size() + 1)
замени на что то такое
1
Mesteriis
379 / 162 / 51
Регистрация: 08.08.2015
Сообщений: 1,148
Завершенные тесты: 1
14.11.2015, 20:48  [ТС] #5
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
14.11.2015, 20:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2015, 20:48
Привет! Вот еще темы с решениями:

Парсинг строки с сайта
привет всем есть сайт и надо с сайта спарсить строчку &lt;p...

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

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

Парсинг опций командной строки
Всем привет) Пишу приложение при помощи Qt. Хочу внедрить поддержку...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru