Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 19.01.2018
Сообщений: 18

Чтение из файла

19.01.2018, 14:13. Показов 1097. Ответов 10

Студворк — интернет-сервис помощи студентам
Здравствуйте. Вопрос.
Необходимо прочитать данные из файла, которые записаны в формате dd.mm.yy(день, месяц, год) и записать в соответствующую переменную.
Т.е. если есть строка 11.12.13, ==> 11 записать в переменную day, 12 в month, 13 в year.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.01.2018, 14:13
Ответы с готовыми решениями:

Чтение чисел из файла. Чтение после конца потока невозможно
Товарищи, помогите. В Pascal'e я не силен, так что не бейте меня ногами, но есть задача: написать обычную программу для расчета некоторых...

Как заменить чтение строки из консоли на чтение текстового файла?
основное задание: найти частоту суффикса (например, "ing") в текстовом документе. в прикреплённом коде текст вводится прямо в консоль,...

Чтение файла, чтение названия папки где находится файл, запись данных на PHP
Допустим у нас есть структура с папками типа Large -> Vehicles -> Firetruck_0 В этой папке лежит файл формата .dat Что нужно сделать? ...

10
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
19.01.2018, 14:33
fscanf или оператор >> в помощь. В чем вопрос-то?
0
0 / 0 / 0
Регистрация: 19.01.2018
Сообщений: 18
19.01.2018, 14:42  [ТС]
Считывается тогда вся строка. А нужно, чтобы 2 символа. Пробовал через getline с 3 параметрами, но при новом его вызове он читает то же самое.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
19.01.2018, 15:32
Покажите как считываете. Как можно в три целочисленных переменных считать целую строку я не знаю.
0
0 / 0 / 0
Регистрация: 19.01.2018
Сообщений: 18
19.01.2018, 16:23  [ТС]
Я думал так, но тогда нужно как то перевести массив в число...


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
32
33
34
35
36
// В файле записано: 11.12.13
#define _CRT_SECURE_NO_WARNINGS 
#include <iostream>
#include <fstream>
#include <clocale>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    ifstream f_data("f_data.txt");
    if (!f_data.is_open())
    {
        cout << "Ошибка! Невозможно открыть файл!";
        system("pause");
        return 1;
    }
    char a[2], b[2], c[2];
    ofstream newf("newf.txt");
    //int day, month, year;
    f_data.getline(a, 3, '.');
    cout << a << endl;
    f_data.getline(b, 3, '.');
    cout << b << endl;
    f_data.getline(c, 3, '.');
    cout << c << endl;
    f_data.close();
    newf.close();
    system("pause");
    return 0;
 
}
// выводит:
//11
//12
//13
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
19.01.2018, 19:00
Лучший ответ Сообщение было отмечено Jekyll-Hyde как решение

Решение

Примерно так
C++
1
2
3
4
5
6
int dd, mm, yy;
char buf; //сюда будем считывать точки
ofstream newf("newf.txt");
newf >> dd >> buf;
newf >> mm >> buf;
newf >> yy;
C
1
2
3
int dd, mm, yy;
fopen(pf, "newf.txt", "rt");
fscanf(pf, "%i.%i.%i", &dd, &mm, &yy);
1
0 / 0 / 0
Регистрация: 19.01.2018
Сообщений: 18
19.01.2018, 20:38  [ТС]
Спасибо

Добавлено через 11 минут
Компилятор ругается. Пишет, что отсутствует оператор">>", соответствующий этим операндам.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
20.01.2018, 10:35
Тогда через fscanf. Либо ждать того кто более-менее шарит в работе с файлами с С++.
В данной конкретной задаче fscanf все равно удобнее.
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
21.01.2018, 18:58
Лучший ответ Сообщение было отмечено Jekyll-Hyde как решение

Решение

Jekyll-Hyde, здравствуйте! Написал программу, которая выдергивает из файла даты в нужном вам формате и проверяет их на валидность с помощью регулярных выражений. Даты могут быть разделены любыми символами. Это, конечно, не лучший вариант, но на выходе, кажется, то, что вам нужно. Далее, вы можете разбить полученные строки (нужные вам даты) и поместить их в соответствующие переменные. Надеюсь, был вам полезен. Пишите, если нужна дальнейшая помощь.

Код программы:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <bits/stdc++.h>
 
using namespace std;
 
string F(string s)
{
    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] == '.')
            while (s[i+1] == '.')
                s.erase(i + 1, 1);
    }
    if (s[0] == '.') s.erase(0, 1);
    if (s[s.size()-1] == '.') s.pop_back();
    return s;
}
 
int main()
{
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    string str, s;
    regex date("^(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.][0-9]{2}$");
    while (getline(fin, str))
    {
        str += " ";
        for (int i = 0; i < str.size(); i++)
        {
            s += str[i];
            if (!(isdigit(str[i])) && (str[i] != '.'))
            {
                s.pop_back();
                if (s != "")
                {
                    s = F(s);
                    if (regex_match(s, date)) cout << s << "\n"; //Выводим искомые даты
                }
                s = "";
            }
        }
    }
    fin.close();
    fout.close();
    system("pause");
    return 0;
}
Добавлено через 31 минуту
Jekyll-Hyde, P.S. Программу написал, но забыл спросить: как разделяются даты в файле? Если просто через пробел или символ новой строки, то задача значительно упрощается. Могут ли быть в файле даты иного формата? Нужно ли проверять даты на валидность?
1
0 / 0 / 0
Регистрация: 19.01.2018
Сообщений: 18
21.01.2018, 20:12  [ТС]
Fixer_84,Большое спасибо. Будет над чем подумать.
Даты в файле разделяются только '.'
Был бы признателен, если бы вы объяснили, что такое валидность. Google мне так и не ответил...
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
21.01.2018, 20:27
Цитата Сообщение от Jekyll-Hyde Посмотреть сообщение
Даты в файле разделяются только '.'
То, что между числами в датах стоит точка я понимаю, я имею ввиду как разделяются целые даты.
Например, между двумя датами в файле может быть какой-то символ или пробел...Если только пробелы, то задача значительно упрощается и я перепишу код.
Цитата Сообщение от Jekyll-Hyde Посмотреть сообщение
Был бы признателен, если бы вы объяснили, что такое валидность.
Под валидностью подразумевается правильность чисел в какой-то дате. Например, не может быть дня > 31 или месяца > 12. Также, можно наложить ограничение на год.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.01.2018, 20:27
Помогаю со студенческими работами здесь

Чтение заголовка PCX файла и чтение растровых данных PCX файла
Привет форумчане! Столкнулся с такой проблемой. Нужно считать заголовок PCX файла и растровые данные PCX файла. Код написал. Часть...

Переделать в коде чтение из файла в чтение с клавиатуры
Переделайте что бы текст считывался с клавиатуры, а не с файла! Буду благодарен за помощь! //файл должен начинаться со слова, между...

Чтение бинарного файла - чтение первых 9 байт
Есть код, который читает первые 9 байт бинарного файла(заголовок записи) void ATS44Encoder::FileEncode() { QFile* file = new...

Чтение файла CSV и чтение из Table View
Здравствуйте, задача считать столбцы и строки excel в TextEdit. Прошу помощи в реализиции. Вручную сохраняю xls файл в csv. Потом надо...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru