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

Распарсить файл для извлечения дат из текста - C++

Восстановить пароль Регистрация
 
Crydok
1 / 1 / 0
Регистрация: 16.12.2013
Сообщений: 27
07.05.2014, 08:55     Распарсить файл для извлечения дат из текста #1
Здравствуйте! Помогите, пожалуйста, написать программу. Дан текстовый файл input.txt, состоящий из большого числа строк(примерно 2000), каждая из которых начинается с даты в формате ДД.ММ.ГГГГ (25.02.2002). Нужно считать из каждой строки только дату, т.е 10 первых символов. И вывести в файл output.txt
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2014, 08:55     Распарсить файл для извлечения дат из текста
Посмотрите здесь:

операция извлечения из потока для пользовательского типа C++
Можно ли распарсить XLS файл? C++
C++ Распарсить файл 3Dmax
C++ Распарсить текстовый файл
Распарсить тексовый файл и вывести неодходимые значения в другой файл C++
C++ Распарсить xlsx-файл
C++ Распарсить файл с номерами телефонов и именами абонентов
C++ Как правильно распарсить xml-файл?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
07.05.2014, 09:49     Распарсить файл для извлечения дат из текста #2
Должно работать в таком виде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<fstream>
#include<iostream>
#include<string>
#include<vector>
#include<limits>
int main() {
    const int FILE_SIZE = 2000;
    const int DATA_SIZE = 10;
    char temp[DATA_SIZE + 1];
 
    std::ifstream inputfile("input.txt");
    std::vector<std::string> vect;
    vect.reserve( 2 * FILE_SIZE);
    while(inputfile.good()) {
        inputfile.getline(temp, DATA_SIZE + 1);
        vect.push_back(temp);
        inputfile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    inputfile.close();
 
    std::vector<std::string>::iterator iter = vect.begin();
    std::ofstream outputfile("output.txt");
    while(iter != vect.end())
        outputfile << *iter++ << std::endl;
 
    outputfile.close();
 
    return 0;
}
Однако почему-то у меня программа никак не реагирует на разделители строк. Никак не пойму в чем дело
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
07.05.2014, 11:55     Распарсить файл для извлечения дат из текста #3
Еще такой вариант с бустом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <fstream>
#include <locale>
#include <limits>
#include <boost/date_time/gregorian/gregorian.hpp>
 
namespace gr = boost::gregorian;
 
int main()
{
   std::ifstream ifs("file.txt");
   if (ifs.is_open()) {
      gr::date_input_facet* inp_facet = new gr::date_input_facet("%d.%m.%Y");
      gr::date_facet* out_facet = new gr::date_facet("%d.%m.%Y");
      std::ofstream ofs("Results.txt");
      ofs.imbue(std::locale(ifs.getloc(), out_facet));
      ifs.imbue(std::locale(ifs.getloc(), inp_facet));
 
      gr::date dt;
      while (!ifs.eof()) {
         ifs >> dt;
         if (ifs.fail()) ifs.clear();
         else ofs << dt << "\n";
         ifs.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
      }
   }
   else
      std::cerr << "Error opening file.\n";
 
   return 0;
}
Yandex
Объявления
07.05.2014, 11:55     Распарсить файл для извлечения дат из текста
Ответ Создать тему
Опции темы

Текущее время: 12:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru