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

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

14.11.2015, 18:24. Просмотров 869. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

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

4
igorrr37
1867 / 1483 / 751
Регистрация: 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
1867 / 1483 / 751
Регистрация: 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

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

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

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


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

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

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