Fichiers en C

boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 - 26 juil. 2009 à 00:24
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 28 juil. 2009 à 00:05
Salut,

1) Dans mon travail, j'utilise des fichiers.

je crée un fichier "essai.txt" pour le remplir

fp = fopen("essai.txt","w");

// je fais des traitements
......fprintf(fp,"hhhhhhhhhhh");

//je ferme le fichier
fclose(fp);

//je veux lire ce fichier
rewind(fp);
fp = fopen("essai.txt","r");

//lire de ce fichier
while(fgets(s,100,fp));
...
fclose(fp);

Comme vous remarquez j'ouvre plusieurs fois le même fichier et je les ferme plus que fois.

Comment je vais résoudre ce problème d'ouverture et fermeture plus que
fois ? Quel mode à choisir d'ouverture pour créer un fichier puis lire de ce fichier ?

2) Je voudrais positionner sur la ligne numéro k au lieu de lire ligne par ligne jusqu'à ligne numéro k. Alors , comment je positionne directement sur le k ème ligne du
fichier ?

3) Est ce que on peut faire l'union, l'intersection et la différence
entre les lignes de deux fichiers qui ont le même format au niveau contenu?

Merci.

5 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
27 juil. 2009 à 09:04
Salut,

1) "rw" avec un fseek pour revenir au début après avoir écrit devrais fonctionner. Après, normalement si tu as écrit dans le fichier tu n'as pas besoin de le relire pour retrouver tes données, ce qui serait mieux vu que la lecture/écriture dans des fichiers prend beaucoup de temps.
2) Si tu as compté le nombre de caractères écrits, un fseek est suffisant.
3) Oui, mais il te faut le coder.
0
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
27 juil. 2009 à 10:05
Salut,

1) "w+" çà marche pour l'écriture et lecture ?

2)
j'ai un fichier contient deux champs: un objet (un entier de taille
10) et une valeur (une chaine de caractère de taille 20).
je remplie mon fichier suivant le format suivant:
fprintf (fp, "%10d%20s\n",objet, valeur);

Comment utiliser fseek() pour positionner sur la troisième ligne par exemple ?

3)
J'ai deux fichiers texte "fich1.txt" et "fich2.txt".
Les deux fichiers ont le même type au niveau contenu puisque chaque ligne est formé par une chaine caractère. Sachant que le contenu de "fich2.txt" est toujours inclus dans "fich1.txt"

Par exemple:
fich1.txt

"Bonjour"
"Bonsoir"
"Salut"
"Bye"
"Bienvenue"

fich2.txt
"salut"
"bye"


Je voudrais sauvegarder dans un autre fichier "diff.txt" qui contient les chaines qui existent dans "fic1h.txt" et non dans "fich2.txt".

donc, le résultat est dans "diff.txt" :
"Bonjour"
"Bonsoir"
"Bienvenue"

Mais, moi j'obtiens par mon suivant:
"diff.txt":
"Bonjour"


....
void main()
{
....
...
fp1=fopen("fich1.txt","r");
fp2=fopen("fich2.txt","r");
fp3=fopen("diff.txt","w");

while (fgets(ch,100,fp1)) 
{
sscanf(ch,"%s",att1);

while(fgets(s,100,fp2)) 
{
sscanf(s,"%s",att2);
if(memcmp(att2,att1,strlen(att1))!= 0)
        fprintf(fpNS,"%s\n",att1);

}
}

fclose(fp1,fp2,fp3);
}


- Avez-vous une idée ou autre solution mieux?
- le but de ce programme est de faire la différence alors quelle modification à faire pour aboutir l'union et l'intersection entre les deux fichiers ?
C'est çà dire:
"union.txt"
"Bonjour"
"Bonsoir"
"Salut"
"Bye"
"Bienvenue"

"intersection.txt"
"salut"
"bye"



Autre questions:

- chaque ligne du fichier contient une chaine de caractère de même taille. je voudrais obtenir dans un autre fichier ou dans le même fichier le même contenu tout en séparant las caractère du la chaine par un espace.
par exemple "test.txt":

aaaaa
ahkhi
kjhgu
oijjm
kklkl


ce fichier devient:
a a a a a
a h k h i
k j h g u
o i j j m
k k l k l

Il y a une fonction définie en C ?

S'il vous plaît, pouvez vous m'aider ?

Merci.
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
27 juil. 2009 à 10:15
Salut,

1) Oui en effet.
2) fprintf() retourne le nombre de caractères écrits.
3) Il existe un programme nommé diff qui fait tout celà, tu peux t'en inspirer.

"Il y a une fonction définie en C ?"
Non.

"S'il vous plaît, pouvez vous m'aider ?"
malloc donc une chaîne 2 fois plus grande que la première (sans oublier de la place pour le \0) et remplis la correctement, puis écrit la dans le fichier. Ainsi tu évite de faire des tonnes d'appels système.
0
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
27 juil. 2009 à 20:32
Salut,

- comment vous allez utiliser fseek() pour positionner sur le troisième ligne par exemple ?

- pouvez vous déposer le code du programme "diff"qui fait la différence entre deux fichiers ?

Merci.
0

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

Posez votre question
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
28 juil. 2009 à 00:05
0
Rejoignez-nous