Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C++] Estrazione stringa lunghezza variabile tra identificatori...

    Salve...ho una stringa come questa:

    "Tipo,Data,Ora,Origine,Categoria,Evento,Utente,Com puter" (senza gli apici)
    che sarebbe questa:

    "Informazioni,16/08/2006,18.32.49,Service Control Manager,Nessuno,7036,N/D,nome-mio-pc"
    "Errore,16/08/2006,17.00.25,Service Control Manager,Nessuno,7038,N/D,nome-mio-pc"
    "Avviso,16/08/2006,17.00.25,Service Control Manager,Nessuno,7038,N/D,nome-mio-pc"

    (che è un log d servizi di windows)...

    come faccio ad estrarre il TIPO visto che non so quantè lungo?a MENTE so come farlo( ), ma a SCRIVERLO non ce la faccio proprio,sono moooooolto niubbo.... :master:

    Thanks...-Luca-
    asd asd asd

  2. #2

    Re: [C++] Estrazione stringa lunghezza variabile tra identificatori...

    Potresti usare la strtok() :

    char *strtok(char *s1, const char *s2)
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Ok provo dopo cena....
    asd asd asd

  4. #4
    Rileggendo il tuo post noto che hai specificato in c++, quindi se usi la classe 'string', puoi fare così :
    codice:
    	string str="Informazioni,16/08/2006,18.32.49,Service Control Manager,Nessuno,7036,N/D,nome-mio-pc";
    	string part=str.substr(0, str.find(',') );
    	cout << part;
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  5. #5
    Perfetto!!!
    Grazie 1000!!(anche x l'altro forum... )

    asd asd asd

  6. #6
    Grandissimo,funziona....sono andato avanti con il resto della stringa, poi mi sono bloccato a quando devo estrapolare quello tra 2 virgole(quindi origine,categoria,evento,etc...)....

    ho provato a fare così:


    string getOrigine(string orig){
    int inizio=orig.find(".",0)+7; //Dal primo punto che trova si sposta di 7....e fin qui...
    int fine=orig.find(",",inizio)+1;
    return orig.substr(inizio, fine);
    }

    Ma mi prende praticamente fino alla fine della stringa..... :master:
    (p.s. come faccio a inserire la parte d testo come codice???)
    asd asd asd

  7. #7
    tornando ala funzione strtok() puoi farlo così:
    codice:
    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
      char stringa[]="Avviso,16/08/2006,17.00.25,Service Control Manager,Nessuno,7038,N/D,nome-mio-pc";
      
      char *tipo,*data,*ora,*origine,*categoria,*evento,*utente,*computer;
      tipo=strtok(stringa,",");
      data=strtok(NULL,",");
      ora=strtok(NULL,",");
      origine=strtok(NULL,",");
      categoria=strtok(NULL,",");
      evento=strtok(NULL,",");
      utente=strtok(NULL,",");
      computer=strtok(NULL,",");
      
      printf("\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s",tipo,data,ora,origine,categoria,evento,utente,computer);
      getchar();
      
    }

  8. #8
    Originariamente inviato da MisterD
    Grandissimo,funziona....sono andato avanti con il resto della stringa, poi mi sono bloccato a quando devo estrapolare quello tra 2 virgole(quindi origine,categoria,evento,etc...)....

    ho provato a fare così:


    string getOrigine(string orig){
    int inizio=orig.find(".",0)+7; //Dal primo punto che trova si sposta di 7....e fin qui...
    int fine=orig.find(",",inizio)+1;
    return orig.substr(inizio, fine);
    }

    Ma mi prende praticamente fino alla fine della stringa..... :master:
    (p.s. come faccio a inserire la parte d testo come codice???)
    Forse è più pratico utilizzare una funzione che ti ritorni il token voluto :
    codice:
    #include <iostream>
    #include <string>
    
    string getToken( string orig, int tok)
    {
    	string tmp=orig;
    	int pos = tmp.find(',');
    	for(int i=0; i<tok ; i++ )
    	{
    		if(pos <0)
    			return "";
    		tmp.erase(0, pos+1 );
    		pos = tmp.find(',');
    	}
    	return tmp.substr( 0, tmp.find(','));
    }
    
    int main( void )
    {
    	string str ("Informazioni,16/08/2006,18.32.49,Service Control Manager,Nessuno,7036,N/D,nome-mio-pc");
    	
    	string tmp = getToken( str, 3 );
    	cout<<endl<<"Origine = \""<<tmp<<"\""<<endl;
    	
    	tmp = getToken( str, 6 );
    	cout<<endl<<"Utente = \""<<tmp<<"\""<<endl;
    
    	system("PAUSE");
    	return EXIT_SUCCESS;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  9. #9
    Ok dopo provo...(mi si è spuxxanato il portatile,devo formattare.... )...

    Grazie a tutti intanto!!
    asd asd asd

  10. #10
    Mitico!!Con i token ho risolto tutto!!!

    Grazie a tutti!!!byeeeeeeeeeeeee
    asd asd asd

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.