unikin Skrevet 13. juni 2004 Del Skrevet 13. juni 2004 Har en tekstfil med innhold som følgende : ola:23:2 hans:24:1 trond:23:1 osv.. informasjonen står for : navn:medlemsnr:antall år Skal ha en funksjon som skal sjekke om et medlemmsnummer forekommer flere ganger, men klarer bare å hente ut hele linjen og ikke enkelt-deler av linjen, f.eks 23 på ola:23:2. Noen som kan hjelpe meg ? Lenke til kommentar
Klette Skrevet 13. juni 2004 Del Skrevet 13. juni 2004 du må vel ta hele linjen, og så regex'e den Lenke til kommentar
søppel Skrevet 13. juni 2004 Del Skrevet 13. juni 2004 Hvorfor ikke lagre tekstfilene med whitespace (mellomrom, newline eller tab) mellom hvert element? #include <iostream> #include <sstream> #include <string> using namespace std; int main() { // `ss' representerer fila du leser fra. stringstream ss("ola 23 2\n" "hans 24 1\n" "trond 23 1"); string navn; unsigned int medlemsnr; unsigned int aar; ss >> navn; ss >> medlemsnr; ss >> aar; cout << "Navn: " << navn << endl; cout << "Medlemsnr.: " << medlemsnr << endl; cout << "Antall år: " << aar << endl; ss >> navn; ss >> medlemsnr; ss >> aar; cout << "Navn: " << navn << endl; cout << "Medlemsnr.: " << medlemsnr << endl; cout << "Antall år: " << aar << endl; return(0); } // main (Det er forresten ikke umulig å bruke andre ting enn whitespace som separator hvis du vil det.) Lenke til kommentar
Duronator Skrevet 13. juni 2004 Del Skrevet 13. juni 2004 Fullt mulig å bruke annet en whitespace som separator.. I C har jeg brukt strtok() for slikt, og vet det er ett eller annet liknende i c++ for å ta ut tokens. Har bare ikke brukt det på lenge... Men strtok skal jo fungere i c++ også, bare vær forsiktig med bruken Lenke til kommentar
søppel Skrevet 13. juni 2004 Del Skrevet 13. juni 2004 Paster et ex. som tar i bruk boost der : og \n er brukt som separatorer: #include <iostream> #include <sstream> #include <string> #include <boost/tokenizer.hpp> using namespace std; using namespace boost; int main() { boost::char_separator<char> sep(":\n"); typedef boost::tokenizer<boost::char_separator<char> > tokenizer; string line; // `ss' representerer fila du leser fra. stringstream ss("ola:12:21\n" "hans:24:1\n" "trond:23:1"); ss >> line; tokenizer tok(line, sep); for(tokenizer::iterator i = tok.begin(); i != tok.end(); i++) cout << *i << endl; cout << endl; ss >> line; tok.assign(line); for(tokenizer::iterator i = tok.begin(); i != tok.end(); i++) cout << *i << endl; cout << endl; ss >> line; tok.assign(line); for(tokenizer::iterator i = tok.begin(); i != tok.end(); i++) cout << *i << endl; return(0); } // main Som Duronator nevnte, så er strtok (fra C) ikke helt stø; boost::tokenizer er bedre. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå