0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 12
1

Работа с текстовыми файлами

14.11.2016, 15:42. Показов 1744. Ответов 8
Метки нет (Все метки)

Я пишу свой календарь,и у меня задание считать из текстового файла .txt информацию.В текстовом файле записана дата в формате day.month.year - событие и я не могу понять как сделать так,чтобы цифры(наша дата) считывались отдельно от символов и записывались в int переменные,а остальной текст был записан в char массив.Например,если в блокноте записано 1.10.2016 - стоматолог,то 1 записалась в int переменную day,10 в month,2016 в year, а "-стоматолог" в char массив.Подскажите как это можно реализовать? Спасибо за помощь.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2016, 15:42
Ответы с готовыми решениями:

Работа с текстовыми файлами
Здравствуйте. Сегодня писал программу, в которой нужно считать строки из файла и записать их в...

Работа с текстовыми файлами
Доброго времени суток. Есть ф-ия: void FillM(int **&tab, int &w, int &h) { FILE *f;...

Работа с текстовыми файлами си++
#include "stdafx.h" #include <iostream> #include <string> #include <string.h> #include <math.h>...

Работа с текстовыми файлами
Пожалуйста, помогите с задачей: Дан файл f, компоненты которого являются действительными...

8
2644 / 2220 / 239
Регистрация: 03.07.2012
Сообщений: 8,064
Записей в блоге: 1
14.11.2016, 16:10 2
Как-то так, например:
C++
1
2
3
4
5
6
7
8
9
10
int main() {
    // your code goes here
    string s;
    int d,m,y;
    char c;
    cin>>d>>c>>m>>c>>y;
    getline(cin,s);
    cout<<s<<y<<m<<d;
    return 0;
}
0
Форумчанин
Эксперт CЭксперт С++
8193 / 5043 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.11.2016, 16:14 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
 
void ProcessString(const std::string &str)
{
    int day, month, year;
    std::string data;
    char trash; // to read dots
    std::istringstream buf(str);
    if (buf >> day >> trash >> month >> trash >> year && std::getline(buf, data))
        std::cout << "Day: " << day << "\nMonth: " << month << "\nYear: " << year << "\nData: " << data << std::endl;
}
 
int main()
{
    std::ifstream ifs("input.txt");
    for (std::string str; std::getline(ifs, str); ProcessString(str));
}
1
2644 / 2220 / 239
Регистрация: 03.07.2012
Сообщений: 8,064
Записей в блоге: 1
14.11.2016, 16:15 4
или так:
C++
1
2
3
4
5
6
7
8
9
10
int main() {
    // your code goes here
    char s[100];
    int d,m,y;
    char c;
    cin>>d>>c>>m>>c>>y;
    cin.getline(s,100);
    cout<<s<<y<<m<<d;
    return 0;
}
0
Форумчанин
Эксперт CЭксперт С++
8193 / 5043 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.11.2016, 16:16 5
Но я бы скармливал строку регулярке, проверял бы на соответствие и заодно на submatch распределял, а дальше кастовал бы в числа и всё.
0
Эксперт С++
1623 / 953 / 782
Регистрация: 06.02.2016
Сообщений: 2,449
Записей в блоге: 30
14.11.2016, 16:23 6
Или так. Пример для варианта,где в файле одна строка
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
#include <iostream>
#include <string>
#include <regex>
#include <fstream>
using namespace std;
int main() {
    ifstream ff;
    ff.open("tr.txt");
    string s;
    smatch m;
    int day,month,year;
    string task;
    regex e("([01]?[1-9]|[2][0-9]|[3][01])\\.([0][1-9]|[1][0-2])\\.(2\\d+)\\s?-\\s?(\\w+)",regex::icase);
    while(!ff.eof()) {
        getline(ff,s,'\n');
        if(regex_match(s,m,e)) {
            day=stoi(m[1].str());
            month=stoi(m[2].str());
            year=stoi(m[3].str());
            task=m[4].str();
        }
    }
    ff.close();
    cout<<task<<"       "<<day<<"       "<<month<<"          "<<year;
    return 0;
}
0
Форумчанин
Эксперт CЭксперт С++
8193 / 5043 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.11.2016, 16:34 7
C++
1
2
3
4
5
6
7
8
9
10
void ProcessString(const std::string &str)
{
    std::smatch sm;
    if (std::regex_match(str, sm, std::regex("(\\d{1,2})\\.(\\d{1,2})\\.(\\d{1,4}) - (.*)")))
    {
        const int day = std::stoi(sm[1]), month = std::stoi(sm[2]), year = std::stoi(sm[3]);
        const std::string data = sm[4];
        std::cout << "Day: " << day << "\nMonth: " << month << "\nYear: " << year << "\nData: " << data << std::endl;
    }
}
0
2644 / 2220 / 239
Регистрация: 03.07.2012
Сообщений: 8,064
Записей в блоге: 1
14.11.2016, 16:47 8
ТС смотрит на это и думает: "да-а-а, тут знают толк в извращениях"
0
Don't worry, be happy
17777 / 10542 / 2034
Регистрация: 27.09.2012
Сообщений: 26,510
Записей в блоге: 1
14.11.2016, 17:36 9
Цитата Сообщение от zer0mail Посмотреть сообщение
да-а-а, тут знают толк в извращениях
Угу.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <ctime>
#include <string>
#include <iomanip>
 
 
 
int main()
{
    std::string str;
    std::tm t;
    std::cin >> std::get_time(&t, "%d.%m.%Y");
    std::getline(std::cin, str);
    std::cout << "day: " << t.tm_mday
        << "\nmonth: " << t.tm_mon + 1
        << "\nyear: " << t.tm_year + 1900
        << "\nevent: " << str
        << "\n-------------------------" << std::endl;
}
http://rextester.com/MWCR73365
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2016, 17:36
Помогаю со студенческими работами здесь

Работа с текстовыми файлами
Здравствуйте! Как подсчитать количество букв, которые встретились в тексте двойными? Помогите...

Работа с текстовыми файлами
Функция копирует с одного файла в другой, не подскажите как улучшить ее? И есть недостаток нужно...

работа с текстовыми файлами
подскажите пожалуйста как решить эти задачи методом для начинающего или где можно взять литературу...

Работа с текстовыми файлами
Создать программу, которая обрабатывает файл в последовательном режиме. Данные надо считывать по...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru