Ergebnis 1 bis 2 von 2
  1. #1
    Neuling
    Registriert seit
    09.06.2009
    Beiträge
    2

    Standard Hilfe bei stringmanipulation

    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
    Code:
    ID,AegisName,Name,Type,Buy,Sell,Weight,ATK,DEF,Range,Slots,Job,Upper,Gender,Loc,wLV,eLV,Refineable,View,{ Script },{ OnEquip_Script },{ OnUnequip_Script }
    Und so sieht ein eintrag aus:
    Code:
    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:
    Geändert von Armads (09.09.2009 um 01:50 Uhr) Grund: Referenz Link

  2. #2
    this.hatcolor = gray Avatar von Ancient87
    Registriert seit
    29.03.2009
    Beiträge
    143

    Standard

    Ich wuerde das beinhart selber parsen ist eigentlich recht simpel du checkst den string einfach character fuer charcater and baust dir eine kleine state machine je nachdem in welchem state du bist hat ein token eine andere Bedeutung

    Code:
    char** parse(char* inp) 
    { 
    char entries[200][200]; // This will hold all the parsed attributes  
    int entry = 0; // Starting entry 
    char* pos = inp; // Initialisation 
    char* start = inp;  
    while(*pos != '\0') // Do until end of Strong reached 
    {  
    while(*pos != ',') // One attribute 
    {    
    pos++;  
    }  
    
    int length = pos - start;  
    if(length >= 1) 
    {  
    // We got a , 
    memcpy(entries[entry][0],  start, pos - start) 
    entries[entry++][pos-start+1] = '\0' // null terminate string 
    }  
    else 
    {  
    // Empty attribute 
    entries[entry++]  = '\0' 
    }  
    start = pos;
    }
    }  
    return entries; 
    }
    Hab das schnell zusammengehackt denke Ansatz ist klar aber wirst wohl ein bisschen debuggen muessen
    Geändert von Ancient87 (09.09.2009 um 07:08 Uhr)
    Knowledge is power - don't abuse it!

    Fuer niveauvolle Anfragen bin ich unter 139156343 erreichbar

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •