Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

[C++] Konfiguracijos failo skaitymas.


Amxxl

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2847 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Sveiki, šioje pamokoje parodysiu kaip nuskaityti config failo duomenis.

Aš naudosiu šį pavyzdį:

[DISPLAY]
ScreenWidth=1024; Our screen width
ScreenHeight=768; Our screen height
FullScreen=0; Full screen or windowed
VSync=1; Vertex sync

Taigi pradžioj turime užkrauti failą:

bool ConfigParser::Load(std::string file)
{
	File.open(file.c_str());
	return File.is_open();
}

Viską ką daro ši funkcija tai atidaro failą ir gražina true jei buvo atidarytas, false jei ne.

 

Toliau ką turime padaryti tai pašalinti užkomentuotą tekstą tai gali būti ir užkomentuoti kintamieji

ir paliktas komentaras prie kintamojo:

void ConfigParser::RemoveComments(std::string& line)
{
	if (line.find(';') != line.npos)
		line.erase(line.find(';'));
}

Ši funkcija ištriną viską po ; skiriamojo ženklo toje eilutėje kuri paduodama kaip funkcijos argumentas.

& tiesiog reiškia kad imsime atminties adresą tai leidžia keisti kintamojo reikšme kuris paduodamas kaip argumentas.

 

Na ir paskutinė funkcija:

int ConfigParser::Read(std::string option)
{
	if (!File.is_open())
		return 0;

	std::string lineBuffer;

	while (std::getline(File, lineBuffer))
	{
		if (int(lineBuffer.find(option)) != -1)
		{
			RemoveComments(lineBuffer);
			lineBuffer.erase(0, option.length());
			return atoi(lineBuffer.c_str());
		}
	}
	return 0;
}

Ši funkcija ieško "option" failo eilutėse ir jei randa ištrina komentarus ir "option" taigi lieka tik reikšmė(value)

Ir ją gražina integer reikšme.

 

Taigi aptarėme ką daro funkcijos na ir štai rezultatas:

#include <iostream>
#include <fstream>
#include <string>

class ConfigParser
{
	public:
                ConfigParser() {}
		~ConfigParser() { File.close(); }

		bool Load(std::string file);
		int Read(std::string option);
		void RemoveComments(std::string &line);

	private:
		std::fstream File;
};

bool ConfigParser::Load(std::string file)
{
	File.open(file.c_str());
	return File.is_open();
}

int ConfigParser::Read(std::string option)
{
	if (!File.is_open())
		return 0;

	std::string lineBuffer;

	while (std::getline(File, lineBuffer))
	{
		if (int(lineBuffer.find(option)) != -1)
		{
			RemoveComments(lineBuffer);
			lineBuffer.erase(0, option.length());
			return atoi(lineBuffer.c_str());
		}
	}
	return 0;
}

void ConfigParser::RemoveComments(std::string& line)
{
	if (line.find(';') != line.npos)
		line.erase(line.find(';'));
}

int main()
{
	ConfigParser cfg;

	if (!cfg.Load("config.ini"))
		return 0;

	std::cout << cfg.Read("ScreenWidth=") << "\n";
	std::cout << cfg.Read("ScreenHeight=") << "\n";
	std::cout << cfg.Read("FullScreen=") << "\n";
	std::cout << cfg.Read("VSync=") << "\n";

	system("pause");
	return 0;
}

Kaip matote viskas veikia :) Užkrauti pavyko.

Šie failai gali būti panaudoti žaidimo pirminiams duomenims saugoti.

Jei kas kam neaišku klauskite atsakysiu.

 

P.S.: Sorry kad naudojau klase gal kas nesupranta. Bet Čia C++ GOT DAMN!!

post-6405-0-73672500-1468651353_thumb.png

Redaguota , nario Amxxl
  • Teigiamai 1
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2847 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.

Skelbimai


×
×
  • Sukurti naują...