Форум программистов, компьютерный форум CyberForum.ru

Текстовый файл, в котором значения разделены точкой с запятой. Нужен ли regex? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проясните код. Побитовое увелечение/уменьшение на 1 http://www.cyberforum.ru/cpp-beginners/thread775382.html
Вот пример кода. Вы можете объяснить мне как он работает. Я понимаю, что 16 это 10000 в двоичной системе. Код легкий, но я не могу понять как происходит увеличение/уменьшение. // lab 2.7.1v.cpp : Defines the entry point for the console application. // #include "stdafx.h"
C++ printf или boost::format сделать из одной цифры две как принудительно выводить в строку 2 цифры? например вместо 2 — 20, а если 2 цифры то ничего не добавлять? пытался перевести в float, но не знаю как удалить "0." в printf , \b - удаляет предыдущий символ а не следующий. http://www.cyberforum.ru/cpp-beginners/thread775380.html
C++ Написать программу, которая считывает текст из файла
Сост. блок схему,если не трудно сделайте скрин схемы)))))заранее огромное спасибо))))!!! Написать программу, которая считывает текст из файла и выводит на экран только строки,содержащие двузначные числа
C++ Знак ^ c++
Для начала знать бы как он называется, потому что гугл в ответ выдает ересь, ну а в идеале где используется, что делает....
C++ Функции (даны две матрицы. Переставить в них четные и нечетные столбцы) http://www.cyberforum.ru/cpp-beginners/thread775320.html
Помогите пжлста с помощью функции (желательно с пояснениями). Даны две матрицы размерности 7x7 вещественных случайных чисел, принадлежащих диапазону . Переставить в них четные и нечетные столбцы. Вывести исходные и полученные матрицы. В числе подпрограмм должна быть подпрограмма инициализации матрицы случайными числами из определенного диапазона, процедура вывода матрицы на экран в удобной для...
C++ error LNK2001 и указатели на члены класса Изучал идею с таблицей функций, вылезает ошибка 2001. Визуалка 11.0.5. Заранее благодарен. (http://www.tebyan.net/newindex.aspx?pid=31159&BookID=22056&PageIndex=187&Language=3 хотя всё как в книге Липпмана) class ok { public: void a(){} void b(){} void c(){} void d(){} подробнее

Показать сообщение отдельно
Excogit8er
2 / 2 / 0
Регистрация: 23.10.2012
Сообщений: 66

Текстовый файл, в котором значения разделены точкой с запятой. Нужен ли regex? - C++

30.01.2013, 17:39. Просмотров 1073. Ответов 15
Метки (Все метки)

Привет)

В общем, вопрос в том, как сделать правильнее и "красивее", что ли, такое вот задание.

Есть файлик, в котором заданное кол-во значений разделено точкой с запятой.
По типу:
value1;value2;value3;value4;value5; (et cetera)

Мне нравится вариант с регексом.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{ 
ifstream inpf ("C:\\datafile.txt", std::ios_base::in);
if (!inpf) cout << "datafile is missing";
else cout << "processing ...\n\n";
string data;                
boost::regex reg("(\\d{15});(\\d{16});(.*?);(.*?);(.*?);");         
boost::smatch m;
   while (std::getline (inpf, data)) {                      
    if (boost::regex_search(data, m, reg ))                 
            {
                cout << m[2] << "     " << m[5] << endl;
            }   
                else 
                cout << endl;
        }
inpf.close();
Все бы ок, но прикол в том, что значений этих 35, а мне нужны, грубо говоря, только 3е и 19е
Ну не писать же такое вот выражение:

C++
1
boost::regex reg("(\\d{15});(\\d{16});(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);");(.*?);(.*?);(.*?);(.*?);
Можно, конечно, через потоки, по типу:

C++
1
2
3
4
std::string str;
std::istringstream ss(str);
std::string value1;
ss >> value1;
Но тут прикол в том, что между двумя точками с запятой может быть и строка, разделенная пробелами:
";вот такая длинная строка с пробелами;".

В общем, как правильней, или, точнее, грамотней было бы это сделать?

Добавлено через 8 минут
ЗЫ Выражение с регекспом можно и подсократить, конечно:

C++
1
boost::regex reg("(\\d{15});(\\d{16});(.*?);(\\3){30};");
(Не уверен только, как тогда обратиться к 19му subexpression'у и правильно ли я написал вот эту часть: ;(\\3){30};

Но все равно, чувствую, не нужен тут regex, можно сильно проще ))
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru