HTML.it è il sito italiano del web publishing

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



scegli un altro forum
  Pagine (2): [ 1   2   > ]  Indietro   Ricarica   Avanti Invia una risposta

Autore
Discussione     
tafazzi87
Utente di HTML.it



Registrato il: Jun 2011

Provenienza:

Messaggi: 41


ICQ:

MSN:

Skype:


[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;
}

Segnala ad un moderatore | IP: Collegato | Permalink

tafazzi87 è offline Old Post 05-05-2012 10:27
Clicca qui per vedere il profilo dell'utente tafazzi87 Clicca qui per inviare all'utente tafazzi87 un messaggio privato Visualizza ulteriori messaggi scritti dall'utente tafazzi87 Aggiungi l'utente tafazzi87 alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
oregon
Utente di HTML.it



Registrato il: Jul 2005

Provenienza: Roma

Messaggi: 30868


ICQ :

MSN :

Skype :


Ma i campi hanno lunghezza fissa o no ?

Tu sei sicuro che il valore che vuoi leggere inizi dal carattere 25 ?


__________________
La guida di VB6 ... usala!
Se cerchi una API ...
No MP tecnici (non rispondo nemmeno!), usa il forum.

Segnala ad un moderatore | IP: Collegato | Permalink

oregon è offline Old Post 05-05-2012 11:05
Clicca qui per vedere il profilo dell'utente oregon Clicca qui per inviare all'utente oregon un messaggio privato Visita l'homepage dell'utente oregon Visualizza ulteriori messaggi scritti dall'utente oregon Aggiungi l'utente oregon alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
shodan
Utente di HTML.it



Registrato il: Jun 2001

Provenienza:

Messaggi: 2136


ICQ :

MSN :

Skype :


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.

Segnala ad un moderatore | IP: Collegato | Permalink

shodan è offline Old Post 05-05-2012 11:06
Clicca qui per vedere il profilo dell'utente shodan Visualizza ulteriori messaggi scritti dall'utente shodan Aggiungi l'utente shodan alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
tafazzi87
Utente di HTML.it



Registrato il: Jun 2011

Provenienza:

Messaggi: 41


ICQ :

MSN :

Skype :


Citazione:
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

Segnala ad un moderatore | IP: Collegato | Permalink

tafazzi87 è offline Old Post 05-05-2012 11:10
Clicca qui per vedere il profilo dell'utente tafazzi87 Clicca qui per inviare all'utente tafazzi87 un messaggio privato Visualizza ulteriori messaggi scritti dall'utente tafazzi87 Aggiungi l'utente tafazzi87 alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
oregon
Utente di HTML.it



Registrato il: Jul 2005

Provenienza: Roma

Messaggi: 30868


ICQ :

MSN :

Skype :


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.


__________________
La guida di VB6 ... usala!
Se cerchi una API ...
No MP tecnici (non rispondo nemmeno!), usa il forum.

Segnala ad un moderatore | IP: Collegato | Permalink

oregon è offline Old Post 05-05-2012 11:11
Clicca qui per vedere il profilo dell'utente oregon Clicca qui per inviare all'utente oregon un messaggio privato Visita l'homepage dell'utente oregon Visualizza ulteriori messaggi scritti dall'utente oregon Aggiungi l'utente oregon alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
tafazzi87
Utente di HTML.it



Registrato il: Jun 2011

Provenienza:

Messaggi: 41


ICQ :

MSN :

Skype :


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

Segnala ad un moderatore | IP: Collegato | Permalink

tafazzi87 è offline Old Post 05-05-2012 11:17
Clicca qui per vedere il profilo dell'utente tafazzi87 Clicca qui per inviare all'utente tafazzi87 un messaggio privato Visualizza ulteriori messaggi scritti dall'utente tafazzi87 Aggiungi l'utente tafazzi87 alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
tafazzi87
Utente di HTML.it



Registrato il: Jun 2011

Provenienza:

Messaggi: 41


ICQ :

MSN :

Skype :


Citazione:
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?

Segnala ad un moderatore | IP: Collegato | Permalink

tafazzi87 è offline Old Post 05-05-2012 21:32
Clicca qui per vedere il profilo dell'utente tafazzi87 Clicca qui per inviare all'utente tafazzi87 un messaggio privato Visualizza ulteriori messaggi scritti dall'utente tafazzi87 Aggiungi l'utente tafazzi87 alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
oregon
Utente di HTML.it



Registrato il: Jul 2005

Provenienza: Roma

Messaggi: 30868


ICQ :

MSN :

Skype :


Utilizza i singoli elementi della struttura al posto delle variabili.


__________________
La guida di VB6 ... usala!
Se cerchi una API ...
No MP tecnici (non rispondo nemmeno!), usa il forum.

Segnala ad un moderatore | IP: Collegato | Permalink

oregon è offline Old Post 05-05-2012 21:33
Clicca qui per vedere il profilo dell'utente oregon Clicca qui per inviare all'utente oregon un messaggio privato Visita l'homepage dell'utente oregon Visualizza ulteriori messaggi scritti dall'utente oregon Aggiungi l'utente oregon alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
tafazzi87
Utente di HTML.it



Registrato il: Jun 2011

Provenienza:

Messaggi: 41


ICQ :

MSN :

Skype :


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

Segnala ad un moderatore | IP: Collegato | Permalink

tafazzi87 è offline Old Post 05-05-2012 21:35
Clicca qui per vedere il profilo dell'utente tafazzi87 Clicca qui per inviare all'utente tafazzi87 un messaggio privato Visualizza ulteriori messaggi scritti dall'utente tafazzi87 Aggiungi l'utente tafazzi87 alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
oregon
Utente di HTML.it



Registrato il: Jul 2005

Provenienza: Roma

Messaggi: 30868


ICQ :

MSN :

Skype :


Perché? Il ciclo while che ti è stato mostrato serve a trattare tutto il file.

Tu cosa hai scritto?


__________________
La guida di VB6 ... usala!
Se cerchi una API ...
No MP tecnici (non rispondo nemmeno!), usa il forum.

Segnala ad un moderatore | IP: Collegato | Permalink

oregon è offline Old Post 05-05-2012 21:38
Clicca qui per vedere il profilo dell'utente oregon Clicca qui per inviare all'utente oregon un messaggio privato Visita l'homepage dell'utente oregon Visualizza ulteriori messaggi scritti dall'utente oregon Aggiungi l'utente oregon alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
tafazzi87
Utente di HTML.it



Registrato il: Jun 2011

Provenienza:

Messaggi: 41


ICQ :

MSN :

Skype :


non tratta tutto il file, ma solo la prima linea questo è il codice prova ad eseguirlo...
codice:
#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
using namespace std;
struct sq {
    string nome;
    int a,b,c;
};
int main(){
    struct sq ac[20];
    string line;
    int i=0,j;
    istringstream iss;
    ifstream in("dati.txt");
    while(getline(in,line)){
        iss.str(line);
        iss>>ac[i].nome>>ac[i].a>>ac[i].b>>ac[i].c;
    }
    for(j=0;j<20;j++)
        cout<<ac[j].nome<<"    "<<ac[j].a<<"    "<<ac[j].b<<"    "<<ac[j].c;
    return 0;
}

Segnala ad un moderatore | IP: Collegato | Permalink

tafazzi87 è offline Old Post 05-05-2012 21:50
Clicca qui per vedere il profilo dell'utente tafazzi87 Clicca qui per inviare all'utente tafazzi87 un messaggio privato Visualizza ulteriori messaggi scritti dall'utente tafazzi87 Aggiungi l'utente tafazzi87 alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
oregon
Utente di HTML.it



Registrato il: Jul 2005

Provenienza: Roma

Messaggi: 30868


ICQ :

MSN :

Skype :


E nel ciclo while quando aumenti la variabile i ?


__________________
La guida di VB6 ... usala!
Se cerchi una API ...
No MP tecnici (non rispondo nemmeno!), usa il forum.

Segnala ad un moderatore | IP: Collegato | Permalink

oregon è offline Old Post 05-05-2012 21:53
Clicca qui per vedere il profilo dell'utente oregon Clicca qui per inviare all'utente oregon un messaggio privato Visita l'homepage dell'utente oregon Visualizza ulteriori messaggi scritti dall'utente oregon Aggiungi l'utente oregon alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
tafazzi87
Utente di HTML.it



Registrato il: Jun 2011

Provenienza:

Messaggi: 41


ICQ :

MSN :

Skype :


scusa mi sono dimenticato di rimettere la i++ all'interno del while ma non funziona neanche con l'i++ all'interno del while

Segnala ad un moderatore | IP: Collegato | Permalink

tafazzi87 è offline Old Post 05-05-2012 22:02
Clicca qui per vedere il profilo dell'utente tafazzi87 Clicca qui per inviare all'utente tafazzi87 un messaggio privato Visualizza ulteriori messaggi scritti dall'utente tafazzi87 Aggiungi l'utente tafazzi87 alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
oregon
Utente di HTML.it



Registrato il: Jul 2005

Provenienza: Roma

Messaggi: 30868


ICQ :

MSN :

Skype :


Nella riga dopo la

iss>>

scrivi una

iss.clear();


__________________
La guida di VB6 ... usala!
Se cerchi una API ...
No MP tecnici (non rispondo nemmeno!), usa il forum.

Segnala ad un moderatore | IP: Collegato | Permalink

oregon è offline Old Post 05-05-2012 22:35
Clicca qui per vedere il profilo dell'utente oregon Clicca qui per inviare all'utente oregon un messaggio privato Visita l'homepage dell'utente oregon Visualizza ulteriori messaggi scritti dall'utente oregon Aggiungi l'utente oregon alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
tafazzi87
Utente di HTML.it



Registrato il: Jun 2011

Provenienza:

Messaggi: 41


ICQ :

MSN :

Skype :


grazie adesso funziona...ma perchè la clear() che fa?

Segnala ad un moderatore | IP: Collegato | Permalink

tafazzi87 è offline Old Post 06-05-2012 10:45
Clicca qui per vedere il profilo dell'utente tafazzi87 Clicca qui per inviare all'utente tafazzi87 un messaggio privato Visualizza ulteriori messaggi scritti dall'utente tafazzi87 Aggiungi l'utente tafazzi87 alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
Tutte le ore sono con fuso orario CET. Ora sono le 05:13.     

  Pagine (2): [ 1   2   > ]  Ultima discussione   Prossima discussione Invia una risposta
Versione per la stampa | Invia il thread via email | Ricevi aggiornamenti sul thread | Scarica il thread
 

Cerchi un argomento specifico e hai fretta? Usa il motore di ricerca