Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Wczytywanie pliku własnego formatu

Ostatnio zmodyfikowano 2024-02-29 00:29
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
[C++] Wczytywanie pliku własnego formatu
» 2024-02-26 15:15:10
Witam.
Stworzyłem prosty format plików *.hexmap. Format ten zawiera dane mapy w postaci ciągów intów posX, posZ, type.
Potrzebuję wczytać plik z tym formatem.

C/C++
void HexMap::saveAsFile( std::string name )
{
   
name = name + ".hexmap";
   
ofstream file;
   
file.open( name.c_str() );
   
   
for( auto & t: tiles )
   
{
       
file << t->x;
       
file << t->z;
       
file << terrainTypeToInt( t->ttype );
   
}
   
   
file.close();
}

void HexMap::loadFromFile( std::string name )
{
   
name = name + ".hexmap";
   
   
ifstream file;
   
file.open( name.c_str(), ios::in | ios::binary );
   
int x, z, ttype;
   
   
while( !file.eof() )
   
{
       
file >> x;
       
file >> z;
       
file >> ttype;
       
       
HexTile * tile = new HexTile( smgr->getRootSceneNode(), smgr, - 1, x, z );
       
tile->setTerrainType( intToTerrainType( ttype ) );
       
addTile( tile );
       
cout << tile->x << ", " << tile->z << " - " << terrainTypeToInt( tile->ttype ) << "\n";
   
}
   
   
file.close();
}
P-180883
pekfos
» 2024-02-26 18:34:43
A co jest nie tak z podanym kodem?
P-180885
tBane
Temat założony przez niniejszego użytkownika
» 2024-02-26 18:59:25
Wczytuje tylko jedną liczbę - x.
Chciałem ominąć używanie separatorów podczas zapisu.


2147483647, -858993460 - -858993460
load world
P-180886
pekfos
» 2024-02-27 19:17:42
A jak by to miało działać bez separatorów? Jeśli 4518351 to 3 liczby, to jakie? 45-183-51? 451-835-1? Format pliku powinno się dać jednoznacznie zdekodować. Po prostu dodaj spacje między liczby w jednej linii, wczytywanie możesz zostawić jak jest.
P-180892
tBane
Temat założony przez niniejszego użytkownika
» 2024-02-28 16:50:51
czyli nie da się zapisywać zmiennych binarnie. ok, dzięki.

rozwiązanie:
C/C++
void HexMap::saveAsFile( std::string name )
{
   
name = name + ".hexmap";
   
ofstream file;
   
file.open( name.c_str() );
   
   
for( auto & t: tiles )
   
{
       
file << t->x << " ";
       
file << t->z << " ";
       
file << terrainTypeToInt( t->ttype );
       
       
if( t != tiles[ tiles.size() - 1 ] )
           
 file << "\n";
       
   
}
   
   
file.close();
}

void HexMap::loadFromFile( std::string name )
{
   
name = name + ".hexmap";
   
ifstream file;
   
file.open( name.c_str() );
   
   
int x, z, ttype;
   
   
while( !file.eof() )
   
{
       
file >> x;
       
file >> z;
       
file >> ttype;
       
       
HexTile * tile = new HexTile( smgr->getRootSceneNode(), smgr, - 1, x, z );
       
tile->setTerrainType( intToTerrainType( ttype ) );
       
addTile( tile );
   
};
   
   
   
file.close();
   
   
addTriangleSelector();
   
setNeighbours();
}
P-180894
pekfos
» 2024-02-28 19:48:54
czyli nie da się zapisywać zmiennych binarnie.
Nie pytałeś o zapis binarny. Pytałeś jak wczytać plik, którego format zdefiniowałeś wyłącznie kodem który ten plik generuje.
» Pomoce naukoweZapis binarny artykuł
P-180895
tBane
Temat założony przez niniejszego użytkownika
» 2024-02-28 21:15:44
Mój błąd. dziękuje wszystko działa :-)
P-180896
« 1 »
  Strona 1 z 1