[Risolto] lettura da file system call
[Risolto] lettura da file system call
ciao a tutti, ho un problema, in pratica io devo leggere da un file una riga per volta, ogni riga è formata al massimo da un carattere e da 2 interi, vorrei sapere come fare per leggere una riga alla volta e poi estrarre singolarmente i caratteri e i numeri
grazie
grazie
Ultima modifica di gian2991 il lunedì 8 giugno 2015, 17:48, modificato 1 volta in totale.
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: lettura da file system call
che linguaggio?
supponendo sia il linguaggio C. esiste la funzione getline
che ti restituisce un **char contenente la riga letta. Non devi fare altro che prendere l'elemento [0], [1], [2] di lineptr.
supponendo sia il linguaggio C. esiste la funzione getline
Codice: Seleziona tutto
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
- cortinico
- Scoppiettante Seguace

- Messaggi: 477
- Iscrizione: venerdì 15 maggio 2015, 16:49
- Desktop: Unity
- Distribuzione: Ubuntu 15.04 amd64
- Sesso: Maschile
- Località: Pisa
- Contatti:
Re: lettura da file system call
Linguaggio?gian2991 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4766189#p4766189][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:ciao a tutti, ho un problema, in pratica io devo leggere da un file una riga per volta, ogni riga è formata al massimo da un carattere e da 2 interi, vorrei sapere come fare per leggere una riga alla volta e poi estrarre singolarmente i caratteri e i numeri
grazie
Se C la risposta l'hai già ricevuta, altrimenti facci sapere
"Look wide, and even when you think you are looking wide – look wider still!"
http://ncorti.com
http://ncorti.com
Re: lettura da file system call
si si scusate era il C
Re: lettura da file system call
Codice: Seleziona tutto
char *my_string;
int y;
int bytes=100;
/////////////////////////////////////////// LETTURA DA FILE ////////////////////////////////////////////////////
if((fd_in=open("file1.txt",O_RDONLY,0644))==-1){
write(2,"OPEN: -1",sizeof(char)*8);
//syserr("mycat", "Cannot open file.");
}
if((y=getline(&my_string,&bytes,fd_in))==-1){
printf("errore");
exit(1);
}
puts(my_string);- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: lettura da file system call
my_string dovrebbe essere un doppio puntatore a char.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Re: lettura da file system call
an ok, però mi dà errore sul terzo parametro(fd_in) che passo
- cortinico
- Scoppiettante Seguace

- Messaggi: 477
- Iscrizione: venerdì 15 maggio 2015, 16:49
- Desktop: Unity
- Distribuzione: Ubuntu 15.04 amd64
- Sesso: Maschile
- Località: Pisa
- Contatti:
Re: lettura da file system call
Infatti il codice che hai scritto non va.
Il problema è che stai mescolando chiamate di libreria (tipo la getline) e system call (tipo la open).
Scegli se usare syscall o chiamate di libreria ed utilizza solo quelle.
In particolare il problema deriva dal fatto che la libreria utilizza il tipo FILE * per gestire i descrittori dei files, mentre le syscall usano i valori interi per riferire i descrittori.
Ti posto il codice corretto che utilizza solo chiamate di libreria
Il problema è che stai mescolando chiamate di libreria (tipo la getline) e system call (tipo la open).
Scegli se usare syscall o chiamate di libreria ed utilizza solo quelle.
In particolare il problema deriva dal fatto che la libreria utilizza il tipo FILE * per gestire i descrittori dei files, mentre le syscall usano i valori interi per riferire i descrittori.
Ti posto il codice corretto che utilizza solo chiamate di libreria
Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
char *my_string = NULL;
int y;
int bytes=100;
FILE * fd_in;
if((fd_in=fopen("test.txt","r")) == NULL){
fprintf(stderr,"FOPEN: Null Value\n");
/* syserr("mycat", "Cannot open file."); */
}
my_string = (char *)malloc((bytes+1));
if((y=getline(&my_string, (size_t *)&bytes,fd_in))==-1){
fprintf(stderr,"GETLINE: Failure to read line\n");
exit(1);
}
puts(my_string);
/* code */
return 0;
}
"Look wide, and even when you think you are looking wide – look wider still!"
http://ncorti.com
http://ncorti.com
Re: lettura da file system call
il problema è che io posso usare esclusivamente system calls, il file lo riesco a leggere completamente, solo che per decidere le operazioni da fare dovrei riuscire a estrarrei singoli caratteri
- cortinico
- Scoppiettante Seguace

- Messaggi: 477
- Iscrizione: venerdì 15 maggio 2015, 16:49
- Desktop: Unity
- Distribuzione: Ubuntu 15.04 amd64
- Sesso: Maschile
- Località: Pisa
- Contatti:
Re: lettura da file system call
Allora non puoi usare la getline in quanto non è una system call. Devi usare una read. Se sai già come è fatto il tuo file puoi organizzarti e fare delle read di lunghezza precisa, altrimenti devi utilizzare funzioni da strings.h tipo strchr per beccare il carattere di newlinegian2991 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4766608#p4766608][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:il problema è che io posso usare esclusivamente system calls, il file lo riesco a leggere completamente, solo che per decidere le operazioni da fare dovrei riuscire a estrarrei singoli caratteri
"Look wide, and even when you think you are looking wide – look wider still!"
http://ncorti.com
http://ncorti.com
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti