Les fichiers [problème]

Fermé
rogina1 Messages postés 80 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 20 septembre 2008 - 4 mars 2008 à 18:04
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 6 mars 2008 à 20:55
Bonjour,
j'ai essayé d'écrire un petit programme qui me permet de lire un tableau des entiers à partir d'un fichier..
est ce qu'il faut qu'il soit un fichier de données ??<<et ça est ce que je crois aussi>> ou bien un fichier texte !!
voilà en bref ce que j'ai écrit:

#pragma hdrstop
#include<stdio.h>
#include<conio.h>

typedef struct
{
int tab[3];
} enter;
enter endr;

FILE *fich;
char nom[10];
int i;
int tab[3];
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
puts("name + chemin!!!..");
scanf("%s ",nom);


printf("Le tableau .. ");

for(i=0;i<3;i++)
{
printf("t[%d]:",i+1);
scanf("%d",&tab[i]);
}
for(i=0;i<3;i++)
printf("%d ",tab[i]);

fich=fopen(nom,"w");
for(i=0;i<3;i++)
fprintf(fich, "%d ", endr.tab[i]);
fclose(fich);

getch();
}
//---------------------------------------------------------------------------
A voir également:

2 réponses

cijad Messages postés 30 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 8 mai 2008 60
4 mars 2008 à 21:32
Salut,

je suis pas sûr du langage, c'est bien du langage C ? (je ne reconnais pas certains trucs dans ton code)

Quoi qu'il en soit je dirait qu'à priori tu peux utiliser les deux mais à condition d'être cohérent. Si tu utilise un fichier texte il faut l'ouvrir en tant que tel (idem si c'est un fichier binaire). Tout se joue au niveau du fopen :
fich=fopen(nom,"wt");/*ouvrira en lecture en mode texte (par défaut)*/
fich=fopen(nom,"wb");/*ouvrira le fichier en mode binaire (donc illisible par un traitement de texte)*/

A noter, que par défaut, si tu met "w" comme second argument il considère que c'est "wt".

J'espère ne t'avoir pas dis de bétises, j'ai vraiment un doute sur le langage. Si c'est du C je trouve le code très étrange. Si ça n'en est pas, ma foi, ça y ressemble quand même un peu alors tu as des chances pour que cela fonctionne pareil.
0
rogina1 Messages postés 80 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 20 septembre 2008 1
5 mars 2008 à 17:19
Re salut ..
concernant ce que tu a dit..
fich=fopen(nom,"wt");/*ouvrira en lecture en mode texte (par défaut)*/
fich=fopen(nom,"wb");/*ouvrira le fichier en mode binaire (donc illisible par un traitement de texte)*/


j'ai utilisé le "w" simplement prcque j'ai un fichier de données ((qui contient des enregistrements))
je crois que tu n'a pas compris ma question ..
je veut tout simplement créer un tableau de QlQ chose (caractères, entiers, ..) mais de tel sorte qu'il puisse etre concervé après l'atteinte de mon pc, c'est pour ça que je veux le sauvgarder dans un fichier..
dans mon code source, j'ai introduit ce tableau comme une structure de donnée mais ça na pas marché, et donc je me demande
*est ce que le pb est dans le code source??..
ou bien:
*Il faut que j'utilise un autre type de fichier..<<et ici arrive le "wb" et le "wt"..
stp, si tu as une idée tu me dit..
merci d'avance..
0
cijad Messages postés 30 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 8 mai 2008 60 > rogina1 Messages postés 80 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 20 septembre 2008
5 mars 2008 à 18:35
Bon alors je me pose toujours une grosse question c'est quel langage utilises-tu ?

Si tu rencontres un problème, c'est qu'il doit y avoir une erreur dans le code. En effet tu n'utilises ton fichier que pour écrire. Il n'y a donc pas de raison pour que l'ouverture échoue. Si tu me confirme que c'est du C je t'aiderais à le débugguer si tu veux.

Sinon tu as raison d'utiliser un fichier pour stocker tes données puisque tu veux les conserver. Par contre le type de fichier dépend de ce que tu veux en faire après. Si c'est simplement pour les récupérer avec ton programme, ça peut être un fichier binaire (qu'on appel parfois à tort fichier de données, d'où le malentendu peut être) (donc "wb"). Tes données seront alors en quelque sorte protégées puisqu'un logiciel de traitement de texte ne saura pas le lire. Par contre si tu veux pouvoir jeter un coup d'œil sur ton fichier (pour vérifier si il s'est bien écrit en l'ouvrant avec le bloc note par exemple) il faut utiliser un fichier texte (donc "w").

Je regarderais ça plus tard.
0
rogina1 Messages postés 80 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 20 septembre 2008 1 > cijad Messages postés 30 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 8 mai 2008
6 mars 2008 à 12:44
le c++
0
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125 > rogina1 Messages postés 80 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 20 septembre 2008
6 mars 2008 à 20:55
Salutations,

En C++ ton code ressemblerait à ça:

#include <string>
#include <iostream>
#include <fstream>

int main()
{
	char c;
	int	aiValues[3]	=	{ 1, 2, 3 };
	std::string	fileName;
	std::basic_ofstream< int,  std::char_traits<int> > file;

	std::cout	<< "Entrez un nom de fichier" << std::endl;
	std::cin	>>	fileName;

	file.open( fileName.c_str(), std::ios::out | std::ios::binary );
	
	if ( file.is_open() )
	{
		file.write( aiValues, 3 );
		file.close();
	}

	return 0;
}


La différence ? Exactement la même qu'entre le C et le C++.

Bien à vous,
M.

PS:
Les pragma sont des directives de compilations propres à des compilateurs et donc en dehors de tout standard. Bien que certains soient assez répandus, il n'est pas assuré que tous les compilateurs les comprennent.
0
cijad Messages postés 30 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 8 mai 2008 60
6 mars 2008 à 19:44
Ah ba cool, je connais ^^

J'ai une bonne nouvelle pour toi... ton programme tourne sur mon pc (je sais pas si c'était le cas pour toi). J'entends par là qu'il s'exécute et qu'il crée bien un fichier. Donc la gestion du fichier n'est pas le problème.

En fait tu as un premier problème au niveau de la conception de tes variables. Je ne vois pas pourquoi tu utilises une structure en fait. Une structure devient utile quand tu veux rassembler plusieurs variable derrière une même entité. Là concrètement tu ne gère qu'un seul objet, le tableau tab. Pas besoin de le rassembler tout seul dans une structure. Tu peux te contenter de déclarer un tableau d'entiers (int tab[3];) comme tu l'as fait d'ailleurs.

Bon ça c'est pas trop génant mais c'est l'erreur la moins gênante mais fais y attention parce que si tu conçois mal la modélisation de ton problème tu ne peux que t'emeller les pinceaux... et c'est un peu ce que tu as fait là en fait. Deux petits trucs à corriger pour arriver au résultat souhaité (enfin si j'ai bien compris) :

-ligne 20
scanf("%s",nom);//j'ai juste retiré l'espace
L'espace ici te faisait des problèmes. Je ne saurais pas te dire exactement pourquoi, mais il faut que le contenu entre guillemet corresponde exactement à ce que tu va rentrer (je trouve que scanf est très compliqué à gérer)

-ligne 36
fprintf(fich, "%d ", tab[i]);//j'ai retiré le endr.
et retire la déclaration de la strucure et de endr qui sont inutiles. En fait, ce que tu faisait c'est que tu crée deux objets différent dans ton programme. Le premier est crée ligne 9 (enter endr;//te crée une structure de type enter et crée un tableau d'entier au passage endr.tab) le second ligne 14 (int tab[3];//te crée un second tableau ,nommé cette fois simplement tab), en mémoire ces deux tableau sont totalement indépendant. Pourtant si tu regarde bien dans ton code, dans la première boucle tu ecrit dans tab alors que dans la seconde tu lis dans endr.tab. Donc forcément il ecrit pas ce que tu veux dans le fichier.

Voilà avec ces deux corrections ça marche normalement. Tu peux avoir un fichier illisible si tu tape fichier au lieu de fichier.txt. Tu dois donner l'extension à la fonction fopen sinon ton fichier n'est pas reconnu comme fichier texte pas windows.

Voilà, je te laisse étudier ça. Redis moi si ça fonctionne maintenant. J'essayerais aussi de t'écrire un code avec quelques conseils si ça t'intéresse.

PS: peux tu me dire à quoi servent les "pragma", je n'avais jamais vu ça.

bon courage^^
0