Witam.
Mam problem. Otóż pracuje nad programem bazodanowym w którym rekordy będą zapisane w pliku XML no i teraz jestem na etapie pisania części odpowiedzialnej za ładowanie pliku do pamięci jednak napotkałem problem a mianowicie przy wczytywaniu bazy Ignorowane są wszystkie wpisy zaczynające się które są większe indeksem od 1.
Plik który program odczytuje wygląda tak:
<tg>elo</tg>
<tg>Baza</tg>
<entry>
<elo>Kulfon</elo>
<Baza>Plik</Baza>
</entry>
<entry>
<elo>Kulfony1</elo>
<Baza>Pliki</Baza>
</entry>
<entry>
<elo>Kulfony2</elo>
<Baza>Plik3</Baza>
</entry>
<entry>
<elo>Kulfony3</elo>
<Baza>Plik4</Baza>
</entry>
Czyli dla tego pliku program nie zależnie od podanej Pozycji w bazie wyświetla tylko kulfon i plik.
Tu zamieszczam kody źródłowe programu
DbControl.cpp:
#include "DbControl.h"
void DB::CreateDatabase(string PathDb)
{
Dbase = new XMLParser;
Dbase -> LoadFile(PathDb);
if(Dbase->IsLoadFile()==true)
{
Db.resize(1);
Db[0] = Dbase -> GetTagValues("tg");
vector <string> Tmp;
vector <string>Ttmp;
Tmp = Dbase -> GetTagValues("entry");
Db.resize(Tmp.size()+1);
for(int z=0; z<Db[0].size(); z++)
{
Ttmp.resize(Tmp.size()+1);
Ttmp = Dbase->GetTagValues(Db[0][z]);
for(int i=1; i<Ttmp.size()+1; i++)
{
Db[i].push_back(Ttmp[z]);
}
Ttmp.clear();
}
}
}
string DB::GetEntryById(int x, int y)
{
return Db[x][y-1];
}
XmlParser.cpp:
#include "XmlParser.h"
using namespace std;
void XMLParser::LoadFile(string FileName)
{
file_o.open(FileName.c_str(),ios::out);
NameFile = FileName;
while(!file_o.eof())
{
string tmp;
getline(file_o,tmp);
BuffFile+=tmp;
}
file_o.close();
}
string XMLParser::GetBuffer()
{
return BuffFile;
}
vector<string> XMLParser::GetTagValues(string Name)
{
vector<string> Values;
int Istag = 0;
for(int i=0; i<BuffFile.length(); i++)
{
if(BuffFile.substr(i,Name.length()+3)=="</"+Name+">" && Istag>=0)
{
Values.push_back(BuffFile.substr(Istag,(i-Istag)));
i+=Name.length()+3;
Istag = -1;
}
if(BuffFile.substr(i,Name.length()+2)=="<"+Name+">")
{
i+=Name.length()+2;
Istag = i;
}
}
return Values;
}
void XMLParser::SaveFile(string Values)
{
file_w.open(NameFile.c_str(),ios::out|ios::in|ios::trunc);
file_w << Values;
file_w.close();
}
int XMLParser::IsLoadFile()
{
if(BuffFile.length()>0) return 1;
else return 0;
}
main.cpp:
#include <iostream>
#include <cstdlib>
#include "DbControl.h"
#include "XmlParser.h"
#include <vector>
using namespace std;
int main()
{
vector<string>tmp;
XMLParser*plik = new XMLParser;
plik->LoadFile("a.txt");
tmp = plik->GetTagValues("Baza");
for(int i=0; i<tmp.size(); i++)
{
cout<<tmp[i]<<endl;
}
DB*base = new DB;
base ->CreateDatabase("a.txt");
cout<<base ->GetEntryById(3,1);
}