2010-09-25 6 views
0

Existe-t-il un moyen d'imprimer un fichier entier, caractère par caractère, sans connaître sa longueur ou s'inquiéter du nombre de lignes qu'il contient?Imprimer le fichier (de n'importe quelle longueur) caractère par caractère dans C

Maintenant, je lis un fichier et compte combien de lignes il a, lire chaque ligne, l'envoyer à une fonction de manipulation imprimer la chaîne manipulée. J'ai dû créer une fonction countLines() et une fonction readLine() pour le faire. Je me demande simplement s'il y a quelque chose de plus efficace.

+0

Vous devez vraiment être plus précis que cela. Il semble que vous voulez 'cat fichier '(linux) ou' type fichier' (windows). – pmg

Répondre

3

Quelque chose comme cela devrait faire:

int ch = 0; 
while (ch = fgetc(FILE_POINTER) != EOF) { 
    doSomething (ch); 
} 
+0

@Brett Alton: Si vous êtes uniquement préoccupé par les caractères de chaque ligne et non par les sauts de ligne, n'oubliez pas d'ignorer le traitement de ces caractères lorsque vous les lisez ('\ n' ou '\ r' '\ n', selon sur le format du fichier). – gablin

0

Pourquoi ne pas utiliser fread. Voici un exemple:

/* fread example: read a complete file */ 
#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    FILE * pFile; 
    long lSize; 
    char * buffer; 
    size_t result; 

    pFile = fopen ("myfile.bin" , "rb"); 
    if (pFile==NULL) {fputs ("File error",stderr); exit (1);} 

    // obtain file size: 
    fseek (pFile , 0 , SEEK_END); 
    lSize = ftell (pFile); 
    rewind (pFile); 

    // allocate memory to contain the whole file: 
    buffer = (char*) malloc (sizeof(char)*lSize); 
    if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);} 

    // copy the file into the buffer: 
    result = fread (buffer,1,lSize,pFile); 
    if (result != lSize) {fputs ("Reading error",stderr); exit (3);} 

    /* the whole file is now loaded in the memory buffer. */ 

    // terminate 
    fclose (pFile); 
    free (buffer); 
    return 0; 
} 

Note: tampon contient le contenu du fichier.

+0

Mais, il a spécifiquement demandé de le lire "caractère par caractère". – gablin

Questions connexes