2016-11-30 4 views
0

J'essaie de lire des lignes et d'en extraire des informations. Mon texte a par exemple;enregistrer les variables en ligne à partir du fichier?

abate terminar, hacer cesar 
abated amainado, amplacado, mitigado 

qui est un dictionnaire. Le premier mot est l'anglais et le reste sont l'espagnol. J'essaye de sauver le mot anglais dans une variable et ensuite le reste de la ligne dans une autre variable. Je n'ai aucune idée de comment faire ça? J'ai écrit ce code qui lit tout le fichier texte et l'imprime tout.

int main(int argc, const char * argv[]) { 

    char filename[] = "/Users/MyName/Desktop/span.rtf"; 
    FILE *file = fopen (filename, "r"); 

    if (file != NULL) { 
     char line [1000]; 
     while(fgets(line,sizeof line,file)!= NULL) /* read a line from a file */ { 
       fprintf(stdout,"%s",line);  } 

     fclose(file); 
    } 

    return 0; 
} 
+0

Lire sur les chaînes dans votre manuel C. –

+0

Utilisez la fonction [getline] (https://www.gnu.org/software/libc/manual/html_node/Line-Input.html). –

Répondre

1

C'est un bon début, en utilisant fgets() à lire dans les lignes entières qui peuvent ensuite être analysées est une bonne approche en général.

Ensuite, vous devez réfléchir à la façon de stocker votre dictionnaire. Une voie pourrait être un réseau de structures de taille stérique:

struct { 
char *english; 
char *spanish; 
} words[1000]; 

Cela ne suppose pas plus de 1000 mots.

Pour chaque magasin en ligne, juste trouver le premier caractère de l'espace et que ce soit là la scission entre l'anglais et l'espagnol:

size_t word_count = 0; 
while(fgets(line, sizeof line, file) != NULL) 
{ 
    char * const sp = strchr(line, ' '); 
    if(sp != NULL) 
    { 
    *sp = '\0'; 
    while(isspace((unsigned char) *++sp)) 
     ; 
    if(isalpha((unsigned char) *sp) 
    { 
     words[word_count].english = strdup(line); 
     words[word_count++].spanish = strdup(sp); 
    } 
    } 
} 

Quelque chose comme ça devrait vous aider à démarrer. Cela suppose l'existence de strdup(), si vous ne l'avez pas ré-implémenter c'est trivial. Bien sûr, vous devez ajouter du code pour vérifier les échecs d'allocation de mémoire.

0

Essayez ceci:

char english[256]; 
char spanish[256]; 

while(fscanf(file,"%[a-z]%*[ ]%[a-z, ]\n", english, spanish) != 0) { 
    fprintf(stdout, "English: %s\n Spanish: %s\n", english, spanish); 
}