Armads
09.09.2009, 01:49
Guten Nacht,
ich hab seit langen mal wieder beschlossen etwas schwieriges zu probieren,
und hab mich nun an ein txt-basierendes-datenbank-verarbeitungs-tool gesetzt.
Njoa leider scheitere ich nun beim einlesen der daten ~.~".
Das ist die Syntax der Datenbank
ID,AegisName,Name,Type,Buy,Sell,Weight,ATK,DEF,Ran ge,Slots,Job,Upper,Gender,Loc,wLV,eLV,Refineable,V iew,{ Script },{ OnEquip_Script },{ OnUnequip_Script }
Und so sieht ein eintrag aus:
501,Red_Potion,Red Potion,0,50,,70,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(45,65),0; },{},{}Ich hab zwar herausgefunden das die funktion, die ich zum aufteilen der spalten brauche strtok() ist. Leider hat die funktion den negativen effekt das sie ohne erneutes aufrufen der funktion, gleich das nächste token sucht wenn es beim ersten keine daten findet.
Ich weis echt nicht weiter und hoffe das ihr mir vielleicht einen kleinen denkanstoss geben könntet
P.S Der Source is sehr experimentel also is noch nichts festgelegt.
Referenz link, strtok():
http://cplusplus.com/reference/clibrary/cstring/strtok/
Source:
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char *argv[])
{
/* ============================ */
/* Deklaration und Definitionen */
/* ============================ */
#define BUFFER_SIZE 1024
FILE * pFILE;
char Buffer[BUFFER_SIZE];
char Sell[BUFFER_SIZE];
char *Puffer;
/* ============================ */
/* Main code */
/* ============================ */
pFILE = fopen("item_db.txt", "r");
puts("Die File wurde geoeffnet!");
//puts("test1");
if(pFILE == NULL)
{
puts("Fehler beim oeffnen der Datei!");
}
else
{
for(int i = 1; i != 100;)//while(!feof(pFILE))
{
//printf("%i\n",i);
fgets(Buffer, BUFFER_SIZE, pFILE);
if(strcspn(Buffer, "/") != 0)
{
for(int j = 1; j != 23 && Puffer != NULL ; j++)
{
switch(j)
{
case 1:
Puffer = strtok(Buffer, ",");
break;
case 2:
Puffer = strtok(NULL, ",");
break;
case 3:
Puffer = strtok(NULL, ",");
break;
case 4:
Puffer = strtok(NULL, ",");
break;
case 5:
Puffer = strtok(NULL, ",");
break;
case 6:
Puffer = strtok(NULL, ",");
break;
case 7:
Puffer = strtok(NULL, ",");
break;
case 8:
Puffer = strtok(NULL, ",");
break;
case 9:
Puffer = strtok(NULL, ",");
break;
case 10:
Puffer = strtok(NULL, ",");//
break;
case 11:
Puffer = strtok(NULL, "{");//
break;
case 12:
Puffer = strtok(NULL, "{");//
break;
case 13:
Puffer = strtok(NULL, "{");//
break;
case 14:
Puffer = strtok(NULL, ",");
break;
case 15:
Puffer = strtok(NULL, ",");
break;
case 16:
Puffer = strtok(NULL, ",");
break;
case 17:
Puffer = strtok(NULL, ",");
break;
case 18:
Puffer = strtok(NULL, ",");
break;
case 19:
Puffer = strtok(NULL, ",");
break;
case 20:
Puffer = strtok(NULL, "{");
break;
case 21:
Puffer = strtok(NULL, "{");
break;
case 22:
Puffer = strtok(NULL, "{");
break;
default:
break;
}
if(Puffer == "(null)")
{
printf("(null):%i\n",j);
}
printf("%s\n", Puffer);
}
i++;
}
}
}
fclose(pFILE);
puts("Die File wurde geschlossen!");
system("PAUSE");
return EXIT_SUCCESS;
}
ich hab seit langen mal wieder beschlossen etwas schwieriges zu probieren,
und hab mich nun an ein txt-basierendes-datenbank-verarbeitungs-tool gesetzt.
Njoa leider scheitere ich nun beim einlesen der daten ~.~".
Das ist die Syntax der Datenbank
ID,AegisName,Name,Type,Buy,Sell,Weight,ATK,DEF,Ran ge,Slots,Job,Upper,Gender,Loc,wLV,eLV,Refineable,V iew,{ Script },{ OnEquip_Script },{ OnUnequip_Script }
Und so sieht ein eintrag aus:
501,Red_Potion,Red Potion,0,50,,70,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(45,65),0; },{},{}Ich hab zwar herausgefunden das die funktion, die ich zum aufteilen der spalten brauche strtok() ist. Leider hat die funktion den negativen effekt das sie ohne erneutes aufrufen der funktion, gleich das nächste token sucht wenn es beim ersten keine daten findet.
Ich weis echt nicht weiter und hoffe das ihr mir vielleicht einen kleinen denkanstoss geben könntet
P.S Der Source is sehr experimentel also is noch nichts festgelegt.
Referenz link, strtok():
http://cplusplus.com/reference/clibrary/cstring/strtok/
Source:
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char *argv[])
{
/* ============================ */
/* Deklaration und Definitionen */
/* ============================ */
#define BUFFER_SIZE 1024
FILE * pFILE;
char Buffer[BUFFER_SIZE];
char Sell[BUFFER_SIZE];
char *Puffer;
/* ============================ */
/* Main code */
/* ============================ */
pFILE = fopen("item_db.txt", "r");
puts("Die File wurde geoeffnet!");
//puts("test1");
if(pFILE == NULL)
{
puts("Fehler beim oeffnen der Datei!");
}
else
{
for(int i = 1; i != 100;)//while(!feof(pFILE))
{
//printf("%i\n",i);
fgets(Buffer, BUFFER_SIZE, pFILE);
if(strcspn(Buffer, "/") != 0)
{
for(int j = 1; j != 23 && Puffer != NULL ; j++)
{
switch(j)
{
case 1:
Puffer = strtok(Buffer, ",");
break;
case 2:
Puffer = strtok(NULL, ",");
break;
case 3:
Puffer = strtok(NULL, ",");
break;
case 4:
Puffer = strtok(NULL, ",");
break;
case 5:
Puffer = strtok(NULL, ",");
break;
case 6:
Puffer = strtok(NULL, ",");
break;
case 7:
Puffer = strtok(NULL, ",");
break;
case 8:
Puffer = strtok(NULL, ",");
break;
case 9:
Puffer = strtok(NULL, ",");
break;
case 10:
Puffer = strtok(NULL, ",");//
break;
case 11:
Puffer = strtok(NULL, "{");//
break;
case 12:
Puffer = strtok(NULL, "{");//
break;
case 13:
Puffer = strtok(NULL, "{");//
break;
case 14:
Puffer = strtok(NULL, ",");
break;
case 15:
Puffer = strtok(NULL, ",");
break;
case 16:
Puffer = strtok(NULL, ",");
break;
case 17:
Puffer = strtok(NULL, ",");
break;
case 18:
Puffer = strtok(NULL, ",");
break;
case 19:
Puffer = strtok(NULL, ",");
break;
case 20:
Puffer = strtok(NULL, "{");
break;
case 21:
Puffer = strtok(NULL, "{");
break;
case 22:
Puffer = strtok(NULL, "{");
break;
default:
break;
}
if(Puffer == "(null)")
{
printf("(null):%i\n",j);
}
printf("%s\n", Puffer);
}
i++;
}
}
}
fclose(pFILE);
puts("Die File wurde geschlossen!");
system("PAUSE");
return EXIT_SUCCESS;
}