Visualizzazione post con etichetta lettura file. Mostra tutti i post
Visualizzazione post con etichetta lettura file. Mostra tutti i post

lunedì 13 dicembre 2010

C: leggere dati da file scartando testo e commenti

Si supponga di avere un file simile a questo
 #commento1 
valore 1
valore 2
# commento2
valore 3
# commento 3
# commento 4
valore 4
valore 5
valore 6

Si supponga di voler estrapolare da esso i valori escludendo sia il testo superfluo che i commenti.

Il seguente codice descrive un possbile modo per farlo.
 #include <stdio.h> 

int main ( void )
{
static const char filename[] = "file.txt";

FILE *file = fopen ( filename, "r" );

if ( file != NULL )
{
/* here, 4096 is the maximum line size */
char line [ 4096 ];
int i;

/* read a line */
while ( fgets ( line, sizeof(line), file ) != NULL )
{
if(line[0]!='#')
{
sscanf( line, "valore %d\n", &i );
printf("%d\n",i);
}
}
fclose ( file );

}
else
{
perror ( filename );
}

return 0;
}

L'esecuzione del programma descritto sul file di input precedentemente mostrato conduce alla seguente esecuzione
 1
2
3
4
5
6

Il file viene letto una riga alla volta e le righe di commento vengono scartate (riconosciute tramite il carattere '#' iniziale). Se non si tratta di commento, il valore numerico viene estrapolato dalla stringa di testo.

IMPORTANTE: fgets non legge sempre una riga, legge tanti byte quanti sono specificati dal secondo argomento, in presenza di un simbolo di "a capo" interrompe la lettura anche se il numero di byte specificato non è stato raggiunto; quando questo accade si può dire che una riga è stata letta ma per ovvie ragioni è necessario essere certi che la lunghezza in caratteri di una riga non superi quella specificata come secondo argomento di fgets.

mercoledì 25 agosto 2010

Python: leggere e scrivere file

 output = open('out.txt','w') 
output.write('A\n')
output.write('B\n')
output.write('C\n')
output.write('D\n')
output.write('E\n')
output.write('F\n')
output.close()

input = open('out.txt','r')
s = input.readline()
while s!='':
print s
s = input.readline()
input.close()

open: apre un file, 'r' in lettura, 'w' in scrittura
input.readline(): legge una riga dallo streaming associato alla variabile input
input.close(): chiude lo streaming associato alla variabile input

domenica 28 marzo 2010

JAVA: leggere un file di testo

Come leggere un semplice file di testo in Java, una riga alla volta.

Il primo passo consiste nell'importare le classi che ci serviranno:
 import java.io.File; 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.BufferedReader;

Subito dopo è possibile inserire il seguente codice nel metodo in cui vogliamo leggere il file (al posto del nome del file può, naturalmente, essere utilizzata una variabile di tipo String opportunamente inizializzata):
  File f = new File("input.txt"); 
try {
FileInputStream fis = new FileInputStream(f);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
String line = br.readLine();
while(line!=null) {
//TODO: aggiungere qui operazione sulla
// stringa letta
line = br.readLine();
}
}
catch(FileNotFoundException ex) {
//TODO: aggiungere qui gestione eccezione
}
catch(IOException ex) {
//TODO: aggiungere qui gestione eccezione
}

Con questo codice è possibile leggere un qualsiasi file di testo una riga alla volta. E' possibile agire sulle stringhe lette aggiungendo dove indicato il codice (o l'invocazione di un metodo) con il quale si realizzano le operazioni richieste.
Raggiunta la fine del file br.readLine() restituisce null.