Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    [c++] Ottimizzare una estrapolazione di alcune righe

    Con questo codice estrapolo solo le righe del filedaestrapolare.txt con presenze=1° o presenze=0°

    codice:
    
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <sstream>
    #include <iomanip>
    
    #include<stdio.h>
    #include<string.h>
    
    
    using namespace std;
    
    string intToString(int value) {
        stringstream ss;
        ss << value;
        return ss.str();
    }
    
    string floatToString(float value) {
        stringstream ss;
        ss << value;
        return ss.str();
    }
    
    
    int main (int argc, char *argv[]) {
    
    
        FILE *a=fopen("filedaestrapolare.txt","r");
        FILE *b=fopen("estrapolazione.txt","w");
        char buf[1024];
        
        while( fgets(buf,1024,a)) if(strstr(buf,"presenze:0°") || strstr(buf,"presenze:1°")   )     fputs(buf,b);
                        
                                           
                        getchar();
    fclose(a);fclose(b);
         return 0;               
        }
    Ottenendo ad esempio delle righe del tipo:

    presenze:1°***combinazione:25***rs: 408 ra: 91 colpirimanenti: 317

    io vorrei ottimizzare il tutto in modo da avere solo...

    25

    ovvero sia dovrei estrapolare solo il pezzo della stringa compreso tra "combinazione:" e *

    Come potrei modificare il codice soprastante per ottenere ciò?

    Grazie infinite a chi me lo dis!



  2. #2
    Secondo me tutte queste operazioni te le dovresti gestire con un database.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725
    Originariamente inviato da MItaly
    Secondo me tutte queste operazioni te le dovresti gestire con un database.
    No mi trovo benissimo con i leggerissimi files txt ma per quanto riguarda il mio quesito tu sapresti come fare?

    Grazie


  4. #4
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    credo che io debba modificare solo...

    Credo che per ottenere da questa riga:

    presenze:1°***combinazione:25***rs: 408 ra: 91 colpirimanenti: 317

    solo il numero:


    25

    io dovrei modificare solo la parte in rosso di questo cod:

    codice:
    #include<stdio.h>
    #include<string.h>
    int main(){
        FILE *a=fopen("a.txt","r");
        FILE *b=fopen("b.txt","w");
        char buf[1024];
        
        while( fgets(buf,1024,a)) if(strstr(buf,"presenze:0")==NULL)
    fputs(buf,b);


    codice:
     
                        getchar();
    fclose(a);fclose(b);
         return 0;               
        }
    la parte in rosso... per ottenere appunto la sottostringa formata solo dal numerello...
    Ma non so proprio da dove cominciare

    Grazie

  5. #5
    Originariamente inviato da freetom
    No mi trovo benissimo con i leggerissimi files txt
    I tuoi "leggerissimi" file .txt richiedono di essere ri-parsati ogni volta, in un DB le cose sono memorizzate direttamente in binario (con tempi di caricamento molto più rapidi e praticamente nessun parsing da fare) e puoi interrogarlo in SQL. Sinceramente credo che nel tuo caso sia la cosa migliore. Anche senza scomodare pezzi grossi come MySQL, PostgreSQL, MSSQL & co. potresti semplicemente provare ad usare SQLite.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Avrei provato così...

    codice:
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <sstream>
    #include <iomanip>
    
    #include<stdio.h>
    #include<string.h>
    
    
    using namespace std;
    
    string intToString(int value) {
        stringstream ss;
        ss << value;
        return ss.str();
    }
    
    string floatToString(float value) {
        stringstream ss;
        ss << value;
        return ss.str();
    }
    
    
    int main (int argc, char *argv[]) {
    
    string line;
    
        FILE *a=fopen("RITARDI-XE-90numeri-VS-colonna1.txt","r");
        FILE *b=fopen("presenzescelte1.txt","w");
        char buf[1024];
        
        while( fgets(buf,1024,a)) if(strstr(buf,"presenze:0°") || strstr(buf,"presenze:1°")   )     
        
        
        
    fputs(buf,line);
        
    
    
    size_t pos1 = line.find( "combinazione:", pos1 );
    
    size_t pos2 = line.find( "*", pos2 );
    
    string estrapolato = line.substr( pos1, pos2 );
                        
                                           
    getchar();
    
    fclose(a);fclose(b);
    return 0;               
    
    }
    Ovvero a mettere il ricavato della prima analisi in una stringa e poi a estrapolare da questa solo il pezzo voluto solo che nell'operazione di affidamento alla stringa... mi da il seguente errore:

    file1.cpp cannot convert `std::string' to `FILE*' for argument `2' to `int fputs(const char*, FILE*)'

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 © 2025 vBulletin Solutions, Inc. All rights reserved.