Member 13826578 Ответов: 1

Как я могу разобрать входной файл?


Я просто не могу понять, как читать из файла. Вот этот файл:

Случайный Размер: 3
Количество Человек: 2
0::Персона1::2::0
1::Персона2::2::2

Кто-нибудь может мне помочь, пожалуйста?
А вот какой мусор я сделал:

Что я уже пробовал:

std::pair<int, std::vector<Person *> *> parseFileWithName(const std::string& filename){
	int bsiz;
	int pc;
	std::ifstream fil(filename);
	std::vector<Player *> *ow;
	if(fil.is_open()){
		std::string line,np1,np2,np3,np4;
		int bsiz;
		int pc;
		std::getline(filename,line);
		std::istringstream lili(line);
		lili>>np1>>np2>>bsiz;
		std::getline(filename,line);
		std::istringstream pf(line);
		pf>>np3>>np4>>pc;
		while(pc!=0){
			std::getline(filename,line);
			std::string type,nt,ny,nu;
			uint id;
			int xco;
			int yco;
			std::istringstream lineStream(line);
			std::getline(lineStream,id,':');
			std::getline(lineStream,nt,':');
			std::getline(lineStream,type,':');
			std::getline(lineStream,ny,':');
			std::getline(lineStream,xco,':');
			std::getline(lineStream,nu,':');
			lineStream>>yco;
			Person *p1=new Person(id,xco,yco);
			ow->push_back(p1);
			pc--;
		}
	}
	std::pair<int, std::vector<Person *> *> pp(bsiz,ow);
	return pp;
	
}

Richard MacCutchan

Неясно, что вы пытаетесь сделать, или в чем ваша проблема. Но одним из способов было бы прочитать каждую строку и разделить ее на маркеры. Другой метод заключается в использовании перегрузки >> (Как вы сделали выше) для получения отдельных полей. Затем вы можете обработать каждый токен/поле по мере необходимости. Кроме того, попробуйте использовать значимые имена для переменных, чтобы было ясно, что они должны представлять.

1 Ответов

Рейтинг:
1

KarstenK

Вам следует поговорить с создателем этого файла. Похоже, что у вас есть такие структурированные данные:

1. Заголовок (глобальная информационная)
а) максимальное значение для случайных величин
б) количество записей (лиц)

2. Данные (сериализованные лица с количеством 1b)

Первый шаг: чтение первой строки => разбор случайного числа
Второй шаг: чтение второй строки => разбор количества человек
Третий шаг: используйте цикл for для людей и сохраните их в векторе.

Откройте только файл однажды читать строку за строкой до самого конца. Читать учебник по Базовый файловый ввод-вывод для лучшего понимания. Запустите код в образце приложения и отладьте его.