Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2009 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Gestion des données d'un fichier TXT

n°1262379
Elmoricq
Modérateur
Posté le 09-12-2005 à 10:38:38  profilanswer
 

Reprise du message précédent :
[:j l b]
 
 
EDIT :  


Je viens de comprendre :lol:

Message cité 1 fois
Message édité par Elmoricq le 09-12-2005 à 10:39:45
mood
Publicité
Posté le 09-12-2005 à 10:38:38  profilanswer
 

n°1262386
Profil sup​primé
Posté le 09-12-2005 à 10:43:26  answer
 

Un truc du genre

Code :
  1. for (i = 1 ; i < numerodelalignearechercher + 1 ; i++)
  2. {
  3.       fgets(ligne, sizeof ligne, fp);
  4. }


... pour lire les lignes jusqu'à celle qui m'interesse...
Et après, une fois que j'ai ma ligne, comment que je fais pour lui ajouter un caractère?


Message édité par Profil supprimé le 09-12-2005 à 10:45:51
n°1262388
Profil sup​primé
Posté le 09-12-2005 à 10:45:06  answer
 

Elmoricq a écrit :

[:j l b]
 
 
EDIT :  
 
Je viens de comprendre :lol:


 
Pas moi...

n°1262401
Profil sup​primé
Posté le 09-12-2005 à 10:59:37  answer
 

Code :
  1. for (i = 1 ; i < numerodelalignearechercher + 1 ; i++)
  2. {
  3.    fgets(ligne, sizeof ligne, fp);
  4.    fputc('o', fp);
  5. }


Ca marcherait?

n°1262408
Emmanuel D​elahaye
C is a sharp tool
Posté le 09-12-2005 à 11:09:07  profilanswer
 


Mal...  

  • Il faut être sûr que la ligne est prise en entier (vérifier que le '\n' est bien résent)
  • tester le retour de fgets() pour savoir si on a atteint la fin de fichier.
  • quand à '   fputc('o', fp);' : j'ai pas compris. Tu veux écrire dans ton fichier en même temps que tu le lis ? Manque de caffeine ?


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1262412
Profil sup​primé
Posté le 09-12-2005 à 11:12:31  answer
 

Je veux ajouter le caractère 'o' à la fin de la ligne que j'ai choisie.

n°1262415
Elmoricq
Modérateur
Posté le 09-12-2005 à 11:15:10  profilanswer
 


 
remplacer  [:aloy]
 
C'est en tout cas ce que tu t'apprètes à faire. Sachant qu'à cet endroit, tu pointes après le saut de ligne de ce que tu viens de lire dans ton fichier, donc tu vas impacter le premier caractère de la ligne suivante avec ton fputc.
Si tu veux appliquer la solution de @Svear, il faut prévoir l'espace pour le faire dès la création du fichier, après c'est trop tard pour cette solution. Il faut réécrire le fichier intégralement.

n°1262434
Profil sup​primé
Posté le 09-12-2005 à 11:26:46  answer
 

Il faut donc que mon caractère soit ajouté au début de la ligne?
Pardon d'utiliser ajouté... Je dois mettre un " " au début de ma ligne, pour le remplacer par la suite par un 'o', c'est ca?

n°1262441
Profil sup​primé
Posté le 09-12-2005 à 11:32:20  answer
 

Comment faire pour impacter juste avant le \n?

n°1262443
Emmanuel D​elahaye
C is a sharp tool
Posté le 09-12-2005 à 11:34:27  profilanswer
 


V'la qu'il utilise des mots que je ne comprend pas... Impacter ?


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 09-12-2005 à 11:34:27  profilanswer
 

n°1262446
Profil sup​primé
Posté le 09-12-2005 à 11:37:03  answer
 

Sorry.
Je voulais dire comment fait-on pour pointer avant le saut de ligne?
dsl

n°1262447
Elmoricq
Modérateur
Posté le 09-12-2005 à 11:38:36  profilanswer
 

Verbe qui n'existe pas dans le dictionnaire, jargon de bureaux.  
En l'occurrence, la définition serait "avoir un effet sur qqc".
 
 
 
Avec fseek() [:marc]


Message édité par Elmoricq le 09-12-2005 à 11:39:08
n°1262449
Profil sup​primé
Posté le 09-12-2005 à 11:39:49  answer
 

Elmoricq a écrit :

remplacer  [:aloy]
 
C'est en tout cas ce que tu t'apprètes à faire. Sachant qu'à cet endroit, tu pointes après le saut de ligne de ce que tu viens de lire dans ton fichier, donc tu vas impacter le premier caractère de la ligne suivante avec ton fputc.
Si tu veux appliquer la solution de @Svear, il faut prévoir l'espace pour le faire dès la création du fichier, après c'est trop tard pour cette solution. Il faut réécrire le fichier intégralement.


 
Ben c'est pas moi qui ai commencé...

n°1262451
Elmoricq
Modérateur
Posté le 09-12-2005 à 11:42:26  profilanswer
 


 
Il n'empêche que ce verbe n'existe pas dans la langue française, que je l'aie employé ou non.  
C'est du jargon de bureaux. [:spamafote]

n°1262464
Sve@r
Posté le 09-12-2005 à 11:51:46  profilanswer
 


 
Si tu veux utiliser ma solution, il faut que tu commences par créer ton fichier au format voulu ou que tu fasses un programme qui te prenne ton fichier initial et qui en crée une copie au nouveau format).
 
Ensuite, si tu veux modifier le caractère 'd' de la 5° ligne (par exemple), et le remplacer par ' ', il faut que tu fasses 4 fois "fgets" parce que "fgets" arrête sa lecture de fichier à chaque fin de ligne.
Arrivé à cette étape, ton pointeur fichier se trouve positionné au début de la 5° ligne.
Il en te reste plus qu'à faire un déplacement de ce pointeur avec "fseek()" pour le positionner sur la lettre contenant le 'd' de cette ligne et tu n'as plus qu'à écrire ' ' avec fputc().

n°1262465
Profil sup​primé
Posté le 09-12-2005 à 11:52:17  answer
 

Si je suis au début de la ligne suivante, je dois faire :

Code :
  1. fseek(fp, -2, SEEK_CUR);


pour aller à la fin de la ligne précédente, c'est ça?


Message édité par Profil supprimé le 09-12-2005 à 11:53:43
n°1262467
Profil sup​primé
Posté le 09-12-2005 à 11:55:25  answer
 

Sve@r a écrit :

Si tu veux utiliser ma solution, il faut que tu commences par créer ton fichier au format voulu ou que tu fasses un programme qui te prenne ton fichier initial et qui en crée une copie au nouveau format).
 
Ensuite, si tu veux modifier le caractère 'd' de la 5° ligne (par exemple), et le remplacer par ' ', il faut que tu fasses 4 fois "fgets" parce que "fgets" arrête sa lecture de fichier à chaque fin de ligne.
Arrivé à cette étape, ton pointeur fichier se trouve positionné au début de la 5° ligne.
Il en te reste plus qu'à faire un déplacement de ce pointeur avec "fseek()" pour le positionner sur la lettre contenant le 'd' de cette ligne et tu n'as plus qu'à écrire ' ' avec fputc().


 
Je dois me déplacer jusuq'a la fin de cette ligne, mais je ne connais pas sa longueur, donc je ne sais pas de combien je dois me déplacer...
Je ne peux pas plutot reculer à la fin de la ligne précédente?

n°1262493
Emmanuel D​elahaye
C is a sharp tool
Posté le 09-12-2005 à 12:30:31  profilanswer
 


Je crois qu'il est temps de faire le point.
 

  • Un fichier est une séquences de bytes.
  • Un fichier texte un fichier dont les bytes sont organisés en lignes.
  • Une ligne est une suite de caractères terminées par un '\n'.


Si tu désires 'marquer' une ligne pour considérer qu'elle est 'effacée', il faut prévoir un emplacement pour ce marqueur (le plus simple, le premier byte de la ligne) et une valeur (par exemple 1 =ligne valide, 2 = ligne supprimée, je préfère éviter le 0 dans un fichier texte..., ou n'importe quel caractère imprimable réservé pour l'usage. De toutes façons, ça peut être n'importe quoi, puisque ce caractère ne fait pas partie des données...).
 
Donc, pour écrire une ligne de texte, il faut une fonction qui reçoit
 

  • le contexte du fichier (FILE *)
  • l'adresse de la chaine à écrire.


La fonction se charge de placer le marque de validité, puis les données, et enfin un '\n'.
 
Ensuite, il suffira créer une fonction d'effacement de ligne (paramètres : nom de fichier, numero) qui se chargera de repérer la ligne et de modifier son état...
 
Tout celà me parait assez simple, et il n'y a pas du tout besoin de fseek()...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1262494
Sve@r
Posté le 09-12-2005 à 12:30:55  profilanswer
 


 
Ben si t'avais placé le caractère spécial en début de ligne, t'aurais pas ce problème (mais ptet que t'en aurais d'autres). Maintenant il est possible de reculer. Tu fais alors 5 fgets (au lieu de 4) et t'as la 5° ligne donc tu peux calculer sa longueur et ton pointeur se trouve au début de la 6°.
Et la fonction "fseek()" permet d'avancer ou reculer à volonté (le 2° paramètre indique le nb d'octets de déplacement)
fseek(fp, 1, SEEK_CUR) => avance d'un octet
fseek(fp, -1, SEEK_CUR) => recule d'un octet
 
Si tu veux de l'aide sur la façon d'utiliser une fonction, man fonction => man fseek par exemple

n°1262503
Sve@r
Posté le 09-12-2005 à 12:48:08  profilanswer
 

Emmanuel Delahaye a écrit :


Tout celà me parait assez simple, et il n'y a pas du tout besoin de fseek()...


 
Il y a plein de méthodes. Dans la tienne tu réécris la ligne en entier dans un second fichier (enfin je crois). Dans la mienne je n'écris que le caractère qui m'importe mais je travaille sur un seul fichier (que je lis et écris en parallèle) et suis donc obligé de faire intervenir "fseek".


Message édité par Sve@r le 09-12-2005 à 13:21:35
n°1262543
Profil sup​primé
Posté le 09-12-2005 à 13:50:21  answer
 

Comment dois-je ouvrir mon fichier? ("a", "r", "w" )?

n°1262571
Profil sup​primé
Posté le 09-12-2005 à 14:10:21  answer
 

Désolé, mais je ne comprends pas...

n°1262656
Profil sup​primé
Posté le 09-12-2005 à 15:11:08  answer
 

En fait je vais faire autrement :  
JE vais selectionner une ligne. Ensuite, je vais lui dire de copuier toutes les lignes d'avant dans un fichier, puis toutes les lignes d'apres dans ce meme fichier (de sotrte qsue toutes les lignes soient recopiées, sauf celle qui est selectionnée. Ensuite, effacer le fichier original et recopier le fichier provisoire dazns le nouveau fichier qui s'appellera comme le fichier de départ...

n°1262727
Elmoricq
Modérateur
Posté le 09-12-2005 à 15:38:35  profilanswer
 

\o/

n°1262736
Profil sup​primé
Posté le 09-12-2005 à 15:41:16  answer
 

\o/ ...
Ca veut dire quoi???

n°1262754
Profil sup​primé
Posté le 09-12-2005 à 15:46:33  answer
 

comment compter le nombre de lignes de mon fichier?

n°1262849
Profil sup​primé
Posté le 09-12-2005 à 16:39:36  answer
 

Tralalaitou!!!

n°1263019
Sve@r
Posté le 09-12-2005 à 19:19:35  profilanswer
 


 
C'est ce que beaucoup de gens t'ont dit de faire.
 
Il n'y a que moi qui ai pensé que tu pouvais faire ça de façon plus subtile mais je crois que tu devras d'abord essayer d'approfondir tes connaissances de la façon dont fonctionne un fichier en C.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
supprimer un fichier sous unixscript tranférer dans un fichier
[c++] DLL fichier de logslire et écrire à partir d'un fichier
Récupérer les infos d'un fichier txt en batchBase de données gratuite pour soft commercial?
Bibliothèques de gestion de graphes (liste d'adjacence)fichier HEX
base de données des codes barresLecture d'un fichier texte en boucle C++
Plus de sujets relatifs à : Gestion des données d'un fichier TXT


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR