Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2023, 21:02   #1
_*ViLkA*_
Пользователь
 
Регистрация: 19.03.2023
Сообщений: 10
По умолчанию Запись из файла

Есть текстовый файл в который записываются имя и количество очков.Нужно извлечь из файла эти данные так,что бы записать их в вектор пар.
Данные записываются через пробел(что и должно служить разделителем)

Код:
#include <iostream>
#include <vector>
#include <fstream>
#include <Windows.h>
#include <string>

using namespace std;

#define FILE "D:\\table.txt"

class File
{
private:

	string name; // имя игрока
	int score; // очки игрока
	vector<pair<string, int>> table; // пара для результатов

public:

	File() = default;
	/*{
		name = "";
		score = 0;
		table = { {name, score} };
	}*/

	void tableOut() // метод для вывода данных из файла
	{
		ifstream out(FILE);
		string str = "";

		if (out.is_open() == true)
		{
			while (getline(out, str))
			{
				
			}
		}
		out.close();
	}
     
	void tableIn(string n, int s)// метод для записи данных в файл
	{
		ofstream in(FILE, ios_base::app);

		if (in.is_open() != true) { cout << "Ошибка открытия файла!" << endl; exit(0); } // если файл не открылся,то выводим сообщение и выходим из программы

		if (in.is_open() == true) { in << n << " " << s << endl; } // если файл открылся,то записываем в него данные

		in.close(); // закрываем файл
	}

	string getName() const { return name; }
	int getScore() const { return score; }
};

int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	vector<pair<string, int>> t; // создаём переменную вектора пар

	File f; // объект класса

	
	string n = "";
	int s = 0;

		cout << "Введите Ваше имя : ";
		cin >> n;
		cout << endl << endl;

		cout << "Введите количество очков : ";
		cin >> s;
		cout << endl << endl;

		//t.push_back({ n, s }); // добавляем в конец вектора данные

		f.tableIn(n, s); // записываем в файл

		f.tableOut();// выводим на экран
_*ViLkA*_ вне форума Ответить с цитированием
Старый 23.05.2023, 14:43   #2
Килобайт
Новичок
Пользователь
 
Регистрация: 23.05.2023
Сообщений: 13
Лампочка

Для извлечения данных из файла в вектор создал функцию
Цитата:
`tableOut()`
. В этой функции проходимся по каждой строке в файле, и разделяем имя и количество очков по пробелам. Затем создаем пару из полученных данных и добавляем в вектор. Для каждой пары создается элемент вектора. Для записи данных в файл была создана функция
Цитата:
`tableIn()`
, в которую передаются имя и количество очков. Затем мы открываем файл и записываем в него данные. Если файл не открылся, выводим сообщение об ошибке и выходим из программы.

Код:
#include <iostream>
#include <vector>
#include <fstream>
#include <Windows.h>
#include <string>

using namespace std;

#define FILE "D:\\\\table.txt"

class File
{
private:
    string name; // имя игрока
    int score; // очки игрока
    vector<pair<string,int>> table; // пара для результатов
public:
    File() = default;
    void tableOut() // метод для вывода данных из файла
    {
        ifstream out(FILE);
        string str = "";

        if (out.is_open() == true)
        {
            while (getline(out, str))
            {
                string n = "";
                int s = 0;
                for (int i = 0; i < str.size(); i++)
                {
                    if (str[i] != ' ')
                    {
                        n += str[i];
                    }
                    else
                    {
                        s = stoi(str.substr(i + 1));
                        break;
                    }
                }
                table.push_back({n, s});
            }
        }
        out.close();
    }

    void tableIn(string n, int s) // метод для записи данных в файл
    {
        ofstream in(FILE, ios_base::app);

        if (in.is_open() != true) { cout << "Ошибка открытия файла!" << endl; exit(0); } // если файл не открылся,то выводим сообщение и выходим из программы
        if (in.is_open() == true) { in << n << " " << s << endl; } // если файл открылся,то записываем в него данные

        in.close(); // закрываем файл
    }

    string getName() const { return name; }
    int getScore() const { return score; }
};

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

    vector<pair<string,int>> t; // создаём переменную вектора пар

    File f; // объект класса

    string n = "";
    int s = 0;

    cout << "Введите Ваше имя : ";
    cin >> n;
    cout << endl << endl;

    cout << "Введите количество очков : ";
    cin >> s;
    cout << endl << endl;

    f.tableIn(n, s); // записываем в файл

    f.tableOut(); // выводим на экран

    return 0;
}
Килобайт вне форума Ответить с цитированием
Старый 24.05.2023, 10:37   #3
_*ViLkA*_
Пользователь
 
Регистрация: 19.03.2023
Сообщений: 10
По умолчанию

Килобайт, спасибо что так подробно расписал все,очень помог)
_*ViLkA*_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы - Спроектировать и разработать классы Запись в блокноте и Блокнот. Реализовать методы: Добавить запись, Удалить запись, Редактировать запись SashaRozhkov Помощь студентам 0 05.08.2017 19:16
Запись файла Катя100 Помощь студентам 3 12.05.2013 10:20
Запись файла vovken1997 Общие вопросы Delphi 9 25.01.2013 21:01
Запись файла YourLastSong Общие вопросы C/C++ 0 09.10.2011 21:20
Запись файла Angryant Общие вопросы C/C++ 1 06.07.2011 00:03