Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [C++] leggere un numero in una specifica posizione da file

    Volevo sapere come è possibile leggere un numero partendo da una specifica posizione da file.
    io ho un file txt del tipo:

    codice:
    nome              35     47     39   
    nome2             34     32     24
    e vorrei mettere in un array tutti i numeri della prima colonna.
    come faccio? io ho provato ad usare seekg() per spostarmi fino al byte del numero e poi leggere un numero attraverso un get() e poi convertendo il char preso con un int, ma questo non funziona, ho provato anche con lo stream >> ma non funziona...
    questo è il codice (non funzionante)
    codice:
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    struct sq {
        char nome[13];
        int col;
    };
    int main(){
        struct sq a[20];
        ifstream in("dati.txt");
        int i=0;
        if(in.is_open() && in.good()){
            while(!in.eof()){
                char b;
                in.seekg(25);
                in.get(b,2,' ');
                a[i].col=(int)b;
                char next;
                while(in.get(next)){
                    if(next=='\n'){
                        break;
                    }
                }
                i++;
            }
        }
        for(int j=0;j<20;j++){
            cout<<a[j].col<<endl;
        }
        return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma i campi hanno lunghezza fissa o no ?

    Tu sei sicuro che il valore che vuoi leggere inizi dal carattere 25 ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    A me pare un po' contorto come metodo.
    Io farei (ammesso che il file sia come l'hai descritto):
    codice:
    #include <string>
    #include <fstream>
    #include <sstream>
    
    int main(/* etc */) {
    
        std::string name;
        std::string line;
        istringstream iss;
        int a,b,c;
        ifstream inp ("C:/share2/a.txt");
        while (getline(inp,line)) {
             iss.str(line);
    	 iss >> name >> a >> b >> c;
        } 
    }
    In a,b,c ci sono i numeri che hai chiesto e che puoi manipolare come vuoi.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  4. #4
    Originariamente inviato da shodan
    A me pare un po' contorto come metodo.
    Io farei (ammesso che il file sia come l'hai descritto):
    codice:
    #include <string>
    #include <fstream>
    #include <sstream>
    
    int main(/* etc */) {
    
        std::string name;
        std::string line;
        istringstream iss;
        int a,b,c;
        ifstream inp ("C:/share2/a.txt");
        while (getline(inp,line)) {
             iss.str(line);
    	 iss >> name >> a >> b >> c;
        } 
    }
    In a,b,c ci sono i numeri che hai chiesto e che puoi manipolare come vuoi.
    ora provo...grazie

    @oregon si i campi hanno lunghezza fissa e sono sicuro che inizia dal 25

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Mi sembrava che l'accesso diretto fosse un obbligo ... ma se puoi leggere i dati uno dopo l'altro, come suggerito, non vedo perché complicarti la vita.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    non ci avevo pensato...la prima cosa che mi è venuta in mente è stata l'accesso diretto

  7. #7
    Originariamente inviato da shodan
    A me pare un po' contorto come metodo.
    Io farei (ammesso che il file sia come l'hai descritto):
    codice:
    #include <string>
    #include <fstream>
    #include <sstream>
    
    int main(/* etc */) {
    
        std::string name;
        std::string line;
        istringstream iss;
        int a,b,c;
        ifstream inp ("C:/share2/a.txt");
        while (getline(inp,line)) {
             iss.str(line);
    	 iss >> name >> a >> b >> c;
        } 
    }
    In a,b,c ci sono i numeri che hai chiesto e che puoi manipolare come vuoi.
    ma invece io ho un array di strutture e per memorizzare ogni linea e quindi ogni dato della linea all'interno di ogni campo della struttura? cioè iterare il while fino alla fine del file?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Utilizza i singoli elementi della struttura al posto delle variabili.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    si questo si ma riesco a memorizzare solamente la prima linea invece voglio iterarlo per tutte le linee del file...

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Perché? Il ciclo while che ti è stato mostrato serve a trattare tutto il file.

    Tu cosa hai scritto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.