PDA

Visualizza la versione completa : [C++] Leggere N caratteri da file


baru
24-12-2004, 13:52
ho fatto una ricerca tra i post gia esistenti ... am non ho trovato risposta al mio problema.

come faccio a leggere da un file dati.txt :
- un numero preciso di caratteri ???
- e leggere fino a quando non trovo un ';'
e memorizzare quello che ho letto in una stringa

ho provato con READ e con GET ma mi danno pagine e pagine di errore ... quindi ho provato a chiedere a voi ...



//mi sposto all'inizio del file
file.seekg(ios::beg);
string c;
file >> c;
string prova=get( file,4,';');

// leggo 4 caratteri o fermati quando trovi ';'



GRAZIE e buon Natale

netarrow
24-12-2004, 14:31
potresti mettere tutto in un array e leggere quello:



#include <iostream>
#include <fstream>

using namespace std;

const char * filename = "a.txt";

int main () {
char * buffer;
long size;
ifstream file (filename, ios::in|ios::binary|ios::ate);
size = file.tellg();
file.seekg (0, ios::beg);
buffer = new char [size];
file.read (buffer, size);
file.close();

//ora è tutto nell'array buffer, quindi:

for(register int i = 0; i < 4; i++) {//leggi 4 caratteri
if(buffer[i] == ';') break;// se è un ; esci
else
cout << buffer[i];//sennò scrivi
}



delete[] buffer;
return 0;
}


:ciauz: e auguri!

eagle_fly
24-12-2004, 14:35
#include <iostream.h>
#include <fstream.h>

int main()
{
fstream myFile("dati.txt");
char c[20];

myFile.get(c,5,';');
cout<<""<<c<<endl;
return 0;
}


Così dovrebbe andare!
In c++ a meno che non fai una definizione di tipo non esiste il tipo string, esistono i vettori di caratteri, che vengono trattati in modo speciale, in quanto considerati come stringhe. Inoltre get() è un medoto della classe di stream, che può essere quello standard (da tastiera, cin o verso lo schermo cout) oppure un flusso su file (fstream). Ricorda inoltre che per leggere effettivamente 4 caratteri ne devi aggiungere 1 per lo \0 carattere terminatore dfi stringa

pprllo
24-12-2004, 14:44
Vedo che già avete risposto. Comunque, già che ci siamo:


#include <fstream>
#include <iostream>
using namespace std;

int main()
{
ifstream prova("fstreams.txt");

char buf[5];

while(!prova.eof())
{
prova.get(buf, 5, ';');
if (prova.peek()==';') prova.ignore();
cout << buf;
}

return 0;
}

Con questo leggi tutto il file in pezzi di 4 caratteri (o più piccoli se capita il simbolo ';').

netarrow
24-12-2004, 14:47
Originariamente inviato da eagle_fly
...
In c++ a meno che non fai una definizione di tipo non esiste il tipo string
...


La classe string esiste nel header string del namespace std, il fatto è che get non ritorna e non accetta un oggetto string.

:ciauz:

baru
24-12-2004, 14:53
GRAZIE a entrambe

ho scelto la seconda soluzione ... perche il codice è piu compatto ... visto che ho un programma gia di migliaia di righe.


avrei necessita di passarlo a una string ... poiche ho costruito delle classi che sono costriute con una string

come potrei fare ?

un altro paio di domande visto che mi sembrate molto afferrati sull' argomento :

- per spostarmi dalla prima alla seconda riga del file come faccio ?


ANCORA GRAZIE

pprllo
24-12-2004, 15:17
Allora, per trasferirlo ad una string fai:


#include <string.h>
#include <iostream.h>
#include <fstream.h>

int main()
{
string str;
fstream myFile("dati.txt");
char c[20];

myFile.get(c,5,';');
str = c;
cout<<""<<str<<endl;
return 0;
}

Poi, per saltare una riga, se le tue linee finiscono con un newline ti basta fare:


myFile.ignore(80, '\n');

Ricordati che il get non estrae il delimitatore dalla stream. Questo vuol dire che prima di effettuare di nuovo un get con lo stesso delimitatore devi fare un:


myFile.ignore();

Per scartare il carattere successivo.

baru
24-12-2004, 16:20
grazie mille ... ora provo sistemare il tutto ... grazie MOLTO GENTILI

baru
27-12-2004, 13:27
ulteriore domanda...

io ho una stringa su file di questo tipo :

123,124,125,...



int a;
file.get(c,20,',');
.... = c ;


come faccio a portarlo da char ad int ???

andemo
27-12-2004, 13:51
potresti leggere il codice ASCII della stringa e poi portare i corrispondenti numeri in un'array

Loading