Envoyé par
dalfab
Pour toutes les autres modifications, le seul moyen est :
a) on crée un autre fichier par une copie séquentielle du fichier initial
b) les zones à modifier sont écrites elles aussi dans la séquence
c) l'autre fichier est fermé
d) le fichier initial est renommé
e) l'autre fichier prend le nom du fichier initial
f) le fichier initial renommé peut être supprimé si tout s'est bien passé. Sinon on peut restaurer le fichier initial à son nom initial.
Dans ce poste de @dalfab, je comprends qu'on ne peut pas modifier un fichier directement si c'e n'est qu'a le recopier en insérant les modifications qu'on souhaite à l'endroit voulu.
Envoyé par
Sve@r
Tu peux changer les caractères d'un fichier mais en respectant la règle "1 pour 1".
- Tu ouvres ton fichier en mode "r+"
- Tu te positionnes juste avant le caractère à changer
- Tu écris le caractère de remplacement
- Tu fermes le fichier
Ici @Sve@r, Me dit si je comprends bien qu'il est possible de le modifier sans le recopier, faut juste me placer au bon endroit.
Il y a une énorme contradiction entre les deux propos.
Envoyé par
Sve@r
Tu peux changer les caractères d'un fichier mais en respectant la règle "1 pour 1".
- Tu ouvres ton fichier en mode "r+"
- Tu te positionnes juste avant le caractère à changer
- Tu écris le caractère de remplacement
- Tu fermes le fichier
Je me positionne, pas de problème
j’écris ce que je veux, Mais comment faire disparaître ce que les caractères que je veux pas qui se trouvent juste après les caractères que je viens d'ecrire. C'est ça mon probleme.
Parlant de positionnement
Envoyé par
Sve@r
Le seul soucis c'est le positionnement. Parce que pour savoir si tu es sur le bon caractère il te faut le lire. Mais quand tu l'as lu, tu n'est plus "juste devant" mais "juste derrière". Il faut alors jongler avec fseek() (et éventuellement ftell())...
Quand on lit un caractère ou une chaîne de caractères pour s'assurer qu'on a la bonne valeur à supprimer, on n'est plus au bon endroit. donc faut reculer du nombre de caractères lu.
Voici ce que j'ai préconisé pour mon cas:
je lis une ligne entière avec fgets(....) en donnant le nombre de caracteres 1024 pour m'assurer que la ligne entière pourra passer.je récupère la position de fin de lecture (parce que le curseur s'est deplacé ) et pour revenir en arriere (me placer en debut de ligne) je fais la position lue soustraite du nombre de caracteres lus.
*pos= (fgetpos(file, pos) -strlen(s) );
Pour comprendre d'avantage voici comment mon fichier est organisé (en fait il s'agit d'un carnet d'adresse)
Jean
Nice
4587694766
Yves
Berlin
865755436
Anne
Nantes
89357245
Supprimer/modifier Anne ou Jean de la liste de mes contacts?
Envoyé par
Sve@r
Et à cause de cette débilité on est maintenant obligés de préciser la nature du fichier lors des transferts ftp hétérogènes (Unix vers Windows et inversement) pour que le protocole transforme (ou ne transforme pas) les lignes lors des transferts ; et c'est aussi pour ça que le blocnote de cet os crétin ne peut pas lire les fichiers textes Unix (toutes les lignes apparaissent concaténées en une seule) lorsqu'on les passe par clef USB sans les avoir transformés au préalable via "unix2dos".
Ah! Oui, tu en as vraiment contre Windows...
Partager