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

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

17.04.2018, 22:41. Показов 1005. Ответов 12
Метки нет (Все метки)

Есть програма которая используя числа из текстового файла input.txt и решает по формуле указанной в программе.
Код программы:
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
 
 
using namespace std;
 
int main()
{
    ifstream fin("1.txt");
    double a, b;
    try
    {
        if (!fin.good())
        {
            throw "File input.txt doesn't exist!";
        }
        fin >> a >> b;
        cout << "K oplate: " << a * b / 100 << " UAH.\n";
    }
    catch (const char* error)
    {
        cout << error << "\n";
    }
    fin.close();
    return 0;
}
Мне нужно сделать так, что-бы при отсутствии текстового файла программа создавала его сама и оставляла его не заполненым. И что для меня более важно, если в текстовом файле отсутствуют или некоректно введены данные, то выдаёт ошибку "Некоректный формат данных" или "Отсутствуют данные". Зарание спасибо!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2018, 22:41
Ответы с готовыми решениями:

Работа с текстовыми файлами
Делаю лабы по С++. Необходимо записать несколько строк в файл, а затем считать их оттуда. Использую...

Работа с текстовыми файлами
Всем доброго дня! Нужна помощь в решении следующей работы: Нужно создать файл, содержащий текст,...

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

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

12
71 / 58 / 48
Регистрация: 12.03.2017
Сообщений: 563
17.04.2018, 23:36 2
Цитата Сообщение от _easy_ Посмотреть сообщение
Мне нужно сделать так, что-бы при отсутствии текстового файла программа создавала его сама и оставляла его не заполненым.
Пpи созднии объекта откpытии файла для записи в него
C++
1
2
ofstream obj;
obj.open(name.txt);
Если файла нет, то он создает его автоматически.

Добавлено через 4 минуты
Цитата Сообщение от _easy_ Посмотреть сообщение
И что для меня более важно, если в текстовом файле отсутствуют или некоректно введены данные, то выдаёт ошибку "Некоректный формат данных" или "Отсутствуют данные"
если файл создается пpи pаботе пpогpаммы, то ставь условие пpовеpки, что запись в файл только целочисленные значения т.е int.
1
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 21
18.04.2018, 21:18  [ТС] 3
Хорошо, а если у меня уже есть текстовый файл с данными с названием "1.txt" оно стирает всю информацию из моего файла и снова его создаёт уже пустым программа пишет в строчке вместо ответа некое "inf", это из-за того что у меня стоит "double" вместо "int", но в том то и проблемма что я работаю именно с десятичными числами.
0
71 / 58 / 48
Регистрация: 12.03.2017
Сообщений: 563
18.04.2018, 22:58 4
Цитата Сообщение от _easy_ Посмотреть сообщение
Хорошо, а если у меня уже есть текстовый файл с данными с названием "1.txt" оно стирает всю информацию из моего файла и снова его создаёт уже пустым программа пишет в строчке вместо ответа некое "inf", это из-за того что у меня стоит "double" вместо "int", но в том то и проблемма что я работаю именно с десятичными числами.
Без кода ничего сказать не могу.
0
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 21
18.04.2018, 23:13  [ТС] 5
Кстати код у меня частично изменился:
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
 
 
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    ofstream obj; // правильно ведь поставил ваши строчки?
    obj.open("input.txt");
    double a, b;
    try
    {
        if (!fin.good())
        {
            throw "File input.txt doesn't exist! Please create it and fill the data";
        }
                // примерно здесь думаю стоит сделать проверку на коректность данных из текстового файла
        fin >> a >> b;
        cout << "K oplate: " << a * b / 100 << " UAH.\n";
    }
    catch (const char* error)
    {
        cout << error << "\n";
    }
    fin.close();
    return 0;
}
А в текстовом файле, если вдруг важно, числа лежат в столбик.
0
1463 / 1005 / 455
Регистрация: 30.10.2017
Сообщений: 2,793
18.04.2018, 23:29 6
Вы файл затираете в строчках 11-12. Они должны выполняться только после неуспешной попытки открыть файл.
1
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 21
18.04.2018, 23:32  [ТС] 7
Хорошо, значит получается:
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
 
 
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    double a, b;
    try
    {
        if (!fin.good())
        {
            throw "File input.txt doesn't exist! Please create it and fill the data";
        }
                // примерно здесь думаю стоит сделать проверку на коректность данных из текстового файла
        fin >> a >> b;
        cout << "K oplate: " << a * b / 100 << " UAH.\n";
    }
    catch (const char* error)
    {
        cout << error << "\n";
    }
    fin.close();
    return 0;
}
Правильно?
0
1463 / 1005 / 455
Регистрация: 30.10.2017
Сообщений: 2,793
18.04.2018, 23:33 8
Лучший ответ Сообщение было отмечено _easy_ как решение

Решение

_easy_, правильно, но пустой файл создаваться не будет. Если он нужен, добавьте проверку перед теми строчками.
0
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 21
18.04.2018, 23:37  [ТС] 9
Ну вобщем новый пустой файл не обязателен т.к. есть просто сообщение про отсутствие файла. А вот про наличие данных в определённом их колличестве (2 строчки = 2 переменные) в файле очень даже кстати.
0
1463 / 1005 / 455
Регистрация: 30.10.2017
Сообщений: 2,793
18.04.2018, 23:41 10
_easy_, второе предложение не понял о чем. Какие то проблемы еще остались?
0
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 21
18.04.2018, 23:47  [ТС] 11
По факту проверка на наличие самого текстового файла уже работает.
Я хочу добавить вторую проверку. Если файл пустой - выводить сообщение. Как это написать, используя "fseek". И нужна третья проверка на наличие 6 чисел в текстовом файле, често я хз как их сделать
0
1463 / 1005 / 455
Регистрация: 30.10.2017
Сообщений: 2,793
18.04.2018, 23:49 12
_easy_, зачем использовать fseek? Сделайте счетчик и увеличивайте его после каждого считывания a и b. Если считано 0 пар значений, то это и будет ваша вторая проверка. Если считано 6 пар значений (или 3?), то это ваша третяя проверка.
1
1503 / 967 / 811
Регистрация: 30.04.2016
Сообщений: 3,334
10.05.2018, 21:19 13
Цитата Сообщение от _easy_ Посмотреть сообщение
Как это написать, используя "fseek".
Здравствуйте! Проверить файл на пустоту можно, например, так:

C++
1
2
3
4
5
6
7
8
9
bool ifFileIsEmpty() {
    ifstream fin("input.txt");
    long fsize;
    fin.seekg(0, ios::end);
    fsize = fin.tellg();
    if (fsize == 0) return true;
    return false;
    fin.close();
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2018, 21:19
Помогаю со студенческими работами здесь

Работа с текстовыми файлами
3)Разработать программу, которая выполняет следующие действия: создает входной поток для...

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

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

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


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

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

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