Запись из txt в массив
Столкнулся с пробелом в своих знаниях, мне нужно из libary.txt содержимое записать в массив Libary Код:
#include <iostream>
#include <fstream>
#include <list>
#include <cstring>
struct Book
{
char Name[50];
char Author[50];
char Puplicator[50];
char Janr[50];
};
char Libary[400];
void FillArr(std::fstream, char[]);
int main()
{
std::fstream input("libary.txt"); // Открыли поток для чтения из файла
setlocale(0, "");
}
void FillArr(std::fstream txt, char Libary[])
{
Book book;
while (!txt.eof())
{
txt >> book.Name >> book.Author >> book.Puplicator >> book.Janr;
}
}
Вот такой "скелет" вроде как должен быть
Ответы (1 шт):
Автор решения: Kabanikov
→ Ссылка
Немного подумав, сделал так и все работает) Также хочу сказать спасибо всем за помощь.
#include <iostream>
#include <fstream>
#include <list>
#include <cstring>
#include <string>
struct Book
{
std::string Name;
std::string Author;
std::string Puplicator;
std::string Janr;
};
std::string filename = "расположение ФАЙЛА";
const int totalbooks = 10;
Book Libary[totalbooks];
bool ParseFile(std::string filename);
void EditBook(int, int);
char sep = ';'; // используемый разделитель
const int num = 4; // кол-во информационных элементов в строке
int main()
{
setlocale(0, "");
if (ParseFile(filename)) // загружаем и обрабатываем файл
{
std::cout << "Данные из файла были успешно загружены\n";
bool ParseFile(std::string filename)
{
bool result = true;
std::ifstream in; // поток для чтения
in.open(filename); // окрываем файл для чтения
if (in.is_open()) // проверка на успешность открытия файла
{
std::string line; // определяем переменную для хранения строки
int readcounter = 0; // кол-во обработанных строк
while (getline(in, line)) // читаем в цикле все строки файла
{
int pStart = 0; // значение индекса начала элемента
int pStop = 0; // значение индекса разделителя
std::cout << line << std::endl; // выводим содержимое прочитанной строки
if (sizeof(line) > 2) // проверка на минимум 3 разделителя
{
Book book;
for (int i = 0; i < num; i++)
{
pStop = line.find_first_of(sep, pStart);
if (pStop == -1)
pStop = sizeof(line);
switch (i)
{
case 0: book.Name = line.substr(pStart, pStop - pStart);
break;
case 1: book.Author = line.substr(pStart, pStop - pStart);
break;
case 2: book.Puplicator = line.substr(pStart, pStop - pStart);
break;
case 3: book.Janr = line.substr(pStart, pStop - pStart);
break;
}
pStart = pStop + 1;
}
Libary[readcounter] = book;
readcounter++;
}
if (readcounter >= totalbooks)
break;
}
}
else
{
result = false;
}
in.close();
return result;
}