2015-02-12 2 views
0

Я хочу прочитать файл с шаблоном, и я хочу сохранить значения в конце. Например. если в комнате есть три значения размера, которые необходимо сохранить, и так далее.Прочитать файл с шаблоном в C++

Файл Я хочу читать, выглядит так:

room 
{ 
    size 5 3.3 6 
    wallpaper 
    { 
     texture flower.bmp 
     tiling 3 1 
    } 
} 
object vase 
{ 
    translation 0.2 0 0.5 
    roation 0 1 0 0 
    scaling 1 1 1 
    model vase.obj 
    parent tisch 
} 
Object tisch 
{ 
    translation 2.0 0 3 
    roation 0 1 0 45 
    scaling 1.5 1 1 
    model tisch.obj 
    parent NULL 
} 

Я начал этот путь. Как я могу читать и сохранять следующие строки для комнаты и объекта?

fstream osh("/Users/torhoehn/Desktop/room.osh", ios::in); 
    string line; 

    if (osh.good()) { 
     while (getline(osh, line, '\0')) { 
      if (line.compare("room")) { 
       cout << "Found room" << endl; 

      } 

      if (line.compare("object")) { 
       cout << "Found object" << endl; 
      } 
     } 
     osh.close(); 

    } 
+2

Прежде всего, попробуйте найти существующую библиотеку для чтения и анализа формата файла, который у вас есть. И если их нет (сомнительно, если вы сами составляли формат файла, или если это относится, например, к университетскому заданию), вы можете прочитать о разборе и/или состояниях. –

ответ

0

Использование входного оператора:

string noun, junk; 

while(osh >> noun) { 
    if (noun == "room") { 
    cout << "Found room "; 
    osh >> junk >> junk; // for the brace and "size" 
    float length, width, height; 
    osh >> length >> width >> height; 
    cout << length << " long and " << breadth << " wide" << endl; 
    ... 
    } 

    if (noun == "object") { 
    osh >> noun;   // what kind of object? 
    if (noun == "vase") { 
     cout << "found vase "; 
     osh >> junk >> junk; 
     float translationX, translationY, translationZ; 
     osh >> translationX >> translationY >> translationZ; 
     ... 
    } 
    if (noun == "tisch") { 
     cout << "found tisch "; 
     osh >> junk >> junk; 
     float translationX, translationY, translationZ; 
     osh >> translationX >> translationY >> translationZ; 
     ... 
    } 
    ... 
    }  // object 
    ... 

После того, как вы есть, что прекрасно работает, вы можете рассмотреть написание конструкторов для Room класса, Vase класс, и так далее, который сделает код много чище.

+0

Это работает для меня. Спасибо! Но имя объекта неизвестно, поэтому я проверил, существует ли noun == "object", но как я могу повторить это для более чем объекта? – torhoehn

+0

@torhoehn: Извините, я этого не заметил. Я отредактирую ... – Beta