Lấy dữ liệu từ data.bin gán vào map trong c++

c++

(TN) #1

Mình có 1 file Data.bin
Với nội dung:
#IMAGES 4

  • ID: 0
  • PATH: …/Resources/Images/background.png
  • ID: 1
  • PATH: …/Resources/Images/aestroid_brown.png
  • ID: 2
  • PATH: …/Resources/Images/bullet.png
  • ID: 3
  • PATH: …/Resources/Images/player.png
    #UIBUTTON 3
  • ID: 0
  • NORMAL_PATH: …/Resources/UIButton/PlayButtonNormal.png
  • PRESSED_PATH: …/Resources/UIButton/PlayButtonPressed.png
  • ID: 1
  • NORMAL_PATH: …/Resources/UIButton/ReplayButtonNormal.png
  • PRESSED_PATH: …/Resources/UIButton/ReplayButtonPressed.png
  • ID: 2
  • NORMAL_PATH: …/Resources/UIButton/BackButtonNormal.png
  • PRESSED_PATH: …/Resources/UIButton/BackButtonPressed.png
    #FONT 1
  • ID: 0
  • PATH: …/Resources/Fonts/fontPolygon.fnt

Em cần lấy ra đường dẫn path để lưu vào map map( char,image* ) images; tương ứng. Do mới lần đầu học c++ và gặp dạng stl map nên đang gặp khó đoạn này ! Mong mọi người giúp đỡ


(rogp10) #2

Tham khảo cppreference.com nhé :smiley:


(TN) #3

cả stackoverflow, tutotr,cpp,… nữa chứ bác :D.
Trước đó e có thao khảo nhưng chưa search ra được vụ quăng vào map nên mới lên hỏi ạ :smiley:


(rogp10) #4

Cái đó gọi là insert vào map :slight_smile:


(TN) #5

hì cảm ơn a đã nhắc :smiley:


(rogp10) #6

Để đẩy vào set thì cần value thôi, nhưng map thì có thêm key gắn với data nên phải dùng pair.

Với set thì value cũng dúng để so sánh, map chỉ sử dụng key để so sánh, và key là duy nhất (như bên set).
std::map hỗ trợ cú pháp (đúng hơn là op) [] như (và hơn) một mảng bt.


(TN) #7

END TOPIC

    FILE *pFile = fopen(fileName, "rb");
if (pFile == NULL)
{
	Logger::Info("Load Data.bin", "Error when load");
}
int idImage = 0;
int idUIBtn = 0;
int idFont = 0;
char id = 0;
char pathIMG[200];
char pathFONT[200];
char normalPath[200];
char pressPath[200];
Image* image;
UIButton* uibutton;
Font* font;
while (!feof(pFile))
{

	// With image 
	fscanf(pFile, "#IMAGES %d\n", &idImage);

	for (int i = 0; i < idImage; i++)
	{
		fscanf(pFile, "- ID: %c\n", &id);
		fscanf(pFile, "- PATH: %s\n", pathIMG);
		image = new Image(pathIMG);
		images.insert(pair<char, Image*>(id, image));
		//images[id] = image;

	}

	fscanf(pFile, "#UIBUTTON %d\n", &idUIBtn);

	for (int i = 0; i < idUIBtn; i++)
	{
		fscanf(pFile, "- ID: %c\n", &id);
		fscanf(pFile, "- NORMAL_PATH: %s\n", normalPath);
		fscanf(pFile, "- PRESSED_PATH: %s\n", pressPath);

		uibutton = new UIButton(normalPath, pressPath);
		buttons.insert(pair<char, UIButton*>(id, uibutton));
		//buttons[id] = uibutton;
	}

	//With font
	fscanf(pFile, "#FONT %d\n", &idFont);
	for (int i = 0; i < idFont; i++)
	{

		fscanf(pFile, "- ID: %c\n", &id);
		fscanf(pFile, "- PATH: %s\n", pathFONT);
		font = new Font(pathFONT);
		fonts.insert(pair<char, Font*>(id, font));
		//fonts[id] = font;
	}

}
fclose(pFile);

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?