[C/C++] Lire un fichier

Voilà j’ai fait ce petit programme :
[codebox]
#include <stdio.h>

int main(void)
{
FILE *file, *file2;
char szBuffer, nom[1001];

if((file = fopen("fichier.txt", "r")) != NULL)
   {
while (!feof(file))
{
	fread(&szBuffer, 1, 1, file); 
	
	if(szBuffer == '\0') printf("\n");
	
	sprintf(nom,"%c",szBuffer);
	
	if(szBuffer == ' '){
		printf(nom);
		free(nom);
	}
   
   if(szBuffer == '\0') printf("\n");
 
}
}
fclose(file);

    free(szBuffer);
free(nom);
fclose(file);

}
[/codebox]

Le but est de lire un fichier et d’analyser son contenu. Le problème avec le code que j’ai écrit c’est que je copie tout lettre par lettre et que je ne peux pas analyser un mot par exemple.
Comment faire pour reconnaitre un mot dans une phrase par exemple ? ou pour convertir une chaine de caractère en un nombre ?

déjà, fopen c’est mal
fstream est ton ami.
tu pourra en trouver un exemple d’utilisation ici : tuto qui va bien.
donc le but du jeu est d’utiliser la classe string.
ensuite bah tu te débrouille, find(), rfind() et substr() sont tes amies.

Si tu donnais plus de détail sur ce que tu veux « analyser » ça donnerait aussi une réponse plus précise :stuck_out_tongue:

[quote=“fser, post:2, topic: 28118”]déjà, fopen c’est mal
fstream est ton ami.
tu pourra en trouver un exemple d’utilisation ici : tuto qui va bien.
donc le but du jeu est d’utiliser la classe string.
ensuite bah tu te débrouille, find(), rfind() et substr() sont tes amies.

Si tu donnais plus de détail sur ce que tu veux “analyser” ça donnerait aussi une réponse plus précise :P[/quote]

OK donc pas de fopen… mais pourquoi ?

Merci pour le lien je regarde ça tout de suite.

Je veux juste rechercher un mot pour ensuite récupérer les données numériques qui suivent.
C’est du genre :
"Nombre personnes : 535 Nombre de chats : 123"
Je veux pouvoir lire le fichier et stocker ensuite les données lues et analysées comme bon me semble.

toute idiotie mise à part, les classes fstream simplifient grandement la lecture / ecriture de fichiers, il est donc inutile de se casser les pieds avec fopen alors qu’un truc genre :

[code]ifstream file( “monfichier.txt” );

while ( true )
{
string line;
getline( file, line );
if ( file.eof() )
{
break;
}
}[/code]

Le bout de code vient d’ici, car j’ai plus de tests sous la main avec fstream.
mais normalement une fois que tu as tout dans ton string ( bon ok ça revient un peu a faire ce que tu faisais … sauf que sur des char* on utiliser strstr() pour chercher ), tu peux utiliser les nombreuses méthode de la classe qui devraient t’aider dans ta besogne.

exemple si ton fichier ressemble à “Nombre de chats : 54”,
tu fais un :

code
int begin = ligne.find(“chats :”):
string nombre = ligne.substr(++begin,2);
cout << nombre << endl; // Affiche 54, edit : meme pas vrai je crois, mais osf car on en veut pas[/code]

Si si tu peux utiliser fopen bien sûr. C’est du C standard.

Si tu es à l’aise avec le C++ n’hésite pas à utiliser ce langage qui t’offre une bibliothèque standard portable (la STL) avec des services un peu plus sioux que la LIBC.

Pour lire ligne par ligne en C++

Sinon reste en C et utilise fopen.

Pour lire ligne par ligne en C

Si tu connais le format exact de ton fichier tu peux lire le contenu en formatant directement tes données, genre :

fscanf(pFile, "Nombre personnes : %d Nombre de chats : %d", &iNbPersonne, &iNbChat);

iNbPersonne et iNbChat étant des entiers, tu récupères ainsi directement les 2 valeurs « qui vont bien ».

Les « free » que tu fais à la fin de ton exemple son « caca » et ne servent pas du tout (voire pire :stuck_out_tongue: ). Tu n’as pas fait d’allocation sur le tas mais sur la pile. L’allocation est faite automatiquement et la libération aussi :stuck_out_tongue:

ptit up, toujours sur les faq de developpez un peu plus bas

Bon en fait moi je ne connais que le C (pour l’instant) donc si on pouvait éviter le C++ :stuck_out_tongue: (Oui dsl pour le titre)

Comment faire pour « ajouter » deux caractères ?

Edit : c’est bon j’ai trouver : <string.h>