Lire un fichier et envoyer tout les 100 octets

sebastienmz Messages postés 139 Date d'inscription mardi 16 mai 2006 Statut Membre Dernière intervention 23 juin 2008 - 30 nov. 2006 à 14:13
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 - 3 déc. 2006 à 20:40
bonjour j'ai fait un programme d'administration a distance et j'ai fait une fonction pour lire un fichier et je doit envoyer tout les 100 octet lu mais cela marche pas ! POUVEZ VOUS M'AIDER ?!? voila ma source :
void consult (char nf[81]) { //menu de choix de la consultation
  int p = 0;
  int nb = 0;
  FILE * entree;
  char mot[100];
  entree = fopen (nf, "r"); 
  while (1) {
    fscanf (entree , "%c", &mot[p]);
    if (feof (entree)){ //si on arrive la la fin SPOUTCH
      printf("%s", mot);
      strcpy(socketbuff.snd,mot);    
      envoi(&socketbuff);             
      strcpy(socketbuff.snd,"\r\nEND\r\n");    
      envoi(&socketbuff);
      break; 
    } p++;
    if (p>=98){
      p=0;
      printf("%s", mot);
      strcpy(socketbuff.snd,mot);    
      envoi(&socketbuff);             
      memset(mot,'\x00',99);  
  }  }
  fclose(entree);
}

_____________
Sébastien Metthez
www.sebastien-metthez.com

15 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
30 nov. 2006 à 15:10
Salut:

Utilises fgets (buffer, 100, stream);
0
sebastienmz Messages postés 139 Date d'inscription mardi 16 mai 2006 Statut Membre Dernière intervention 23 juin 2008
30 nov. 2006 à 15:14
dois-je faire un feof?

___________
Sébastien Metthez
www.sebastien-metthez.com
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
30 nov. 2006 à 15:15
Salut:

Une petite rectification:

Si tu veux lire au plus 100 caractères tu dois donc lire 101 caractères (un de plus pour '\0')

#define SIZE 101

FILE * stream = fopen ("fichier", "r");
if (stream != NULL) {
    while (fgets (buffer, SIZE, stream) != NULL) {
       // tu travailles maintenant avec ton buffer
    }
    fclose (stream);
}
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
30 nov. 2006 à 15:16
Salut:

Une petite rectification:

Si tu veux lire au plus 100 caractères tu dois donc lire 101 caractères (un de plus pour '\0')

#define SIZE 101
char buffer [SIZE];
FILE * stream = fopen ("fichier", "r");
if (stream != NULL) {
    while (fgets (buffer, SIZE, stream) != NULL) {
       // tu travailles maintenant avec ton buffer
    }
    fclose (stream);
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
30 nov. 2006 à 15:23
Salut:

fgets retourne NULL quand elle détecte la fin du fichier EOF.
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
1 déc. 2006 à 22:43
Salut à tous les deux,

je me pose une question à propos de fgets.
Ne vaudrait-il pas mieux utiliser fread à la place ?
Désolé si je me trompe.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
1 déc. 2006 à 23:57
[auteurdetail.aspx?ID=237842 Ombitious_Developper]

>> Quel '\0'. C'est un fichier. Il n'est pas garantie qu'il soit dedans. En plus, si je me souvien bien, fgets ne récupère qu'une ligne. Si tu veux récupérer 100 char mais que la ligne dans le fichier n'en fais que 10, il n'en récupéra que 10.

Yoyo >> Oui. Voici un exemple simple:

#define SIZE 100
char buf[SIZE+1];
FILE *file = fopen("fichier.txt", "r");
int byte;

while(1)
{
    byte = fread(buf, 1, SIZE, file);
    if(byte != SIZE) break;

    buf[byte] = 0;

    // Manipulation dans le buffer

}

fclose(file);

Ou mieu encore, on récupère tout le fichier dans un buffer pour on navigue dedans avec un pointeur.
C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
2 déc. 2006 à 00:03
Oups pardon, mauvaise boucle. Voici la bonne:

do
{
    byte = fread(buf, 1, SIZE, file);
    if(!byte) break;
    buf[byte] = 0;

    //Manipulation dans buffer

} while(byte == SIZE);

C++ (@++)<!--
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
2 déc. 2006 à 00:55
Salut:

J'ai lu dans MSDN que la fonction fgets ajoute un '\0' au buffer d'entrée quand :
1- elle rencontre un '\n'.
2- lorsque le nombre maximal de caractères est atteind.

La preuve :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_fgets.2c_.fgetws.asp





Remarks






The
fgets function reads a string from the input stream argument and stores it in string.
fgets
reads characters from the current stream position to and including the
first newline character, to the end of the stream, or until the number
of characters read is equal to n – 1, whichever comes first. The result stored in string is appended with a null character. The newline character, if read, is included in the string.
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
2 déc. 2006 à 00:57
Salut YoYo269:

read ou fgets c'est la même.

Cordialement.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 déc. 2006 à 01:04
Non, puisque fgets va s'arrêter à la fin de la ligne, pas fread

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
2 déc. 2006 à 01:37
Salut:

Compris. J'ai mal compris le problème.
Donc on remplace fgets par fread why not !!!
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
2 déc. 2006 à 01:46
Ok c'est vrai. J'avais pas pensé que c'étais fgets qui ajoutait le 0. Désolé.

C++ (@++)<!--
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
2 déc. 2006 à 10:18
Salut à tous,

je vois que ça a beaucoup parlé en mon absence !
Et donc apparemment c'est moi qui avait raison avec fread !!! Wouhouh ! ça se fête pour une fois !
Qui veut du champagne ???

YOYO, @+
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
3 déc. 2006 à 20:40
bonjour,

1. Tester le code retour de fopen :

file = fopen(argv[1], "r");
if(file == NULL)
{
puts("Impossible d'ouvrir le fichier");
return 1;
}

2. Si ton fichier fait moins ou n'est pas un mutliple de 100 octets :

byte = fread(buf, sizeof(char), SIZE, file);

while(byte != 0)
{
buf[byte] = 0;
// traitement du buffer
printf("buffer : %s\n", buf);
byte = fread(buf, 1, SIZE, file);
}

Bonne soirée,

Bertrand
0
Rejoignez-nous