Ecriture fichier ligne

PepeDeLuxe Messages postés 14 Date d'inscription samedi 22 mai 2004 Statut Membre Dernière intervention 29 avril 2005 - 1 avril 2005 à 02:23
minet03 Messages postés 415 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 2 décembre 2005 - 1 avril 2005 à 18:20
Hello



Voila j'ai un problème que je n'arrive pas à résoudre pour un projet, si quelqu'un pouvait m'aider ça serait sympa..

Je voudrais écrire le dans un fichier mais à une ligne précise et non
pas à un offset càd écrire à la ligne 6 par exemple sans effacer les
lignes d'avant et d'après..., je ne sais pas combien de caractère j'ai
par ligne (caractères par lignes < 256), je sais qu'il existe fseek
ou SetFilePointer mais ces fonctions positionne le pointeur à un offset
et non pas au début d'une ligne ...Existe t'il une fonction pout placer
le pointeur au début d'une ligne sans avoir à calculer le nombre de
caractère pour positionner le pointeur???



J'ai fait un truc en lisant caractère par caractère mais naturellement ca ne marche pas bien autant dire que c'est aléatoire :



file=fopen("monfichier.txt","r+");

while (j<ligne)

{

while (getc(file)!='\n')

index++;

index++;

j++;

}
fseek(file,index,SEEK_SET);

fprintf(file,phrase);

fclose(file);



Merci pour votre aide

5 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
1 avril 2005 à 06:48
Je ne pense pas qu'il existe ce genre de fonctions. Moi personnellement, je te conseillerais de lire le fichier, de parcourir le buffer, et de compter le nombre de '\r' (ou '\n'), et de placer le 'pointeur de fichier' a l'endroit ou tu t'es arreté de parcourir ton buffer (pour connaitre le nombre d'octets a sauter, tu fais : Pointeur de fin - pointeur de depart = nbr_octets).

Je sais pas si quelqu'un a mieux, mais moi personnellement, je ferais comme ca :/

+2(p - n)
0
minet03 Messages postés 415 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 2 décembre 2005 3
1 avril 2005 à 11:18
Mais en lisant le fichier caractère par caractère et en vérifiant '\n' ou '\r' le pointeur se deplace de le flux du fichier. Donc il suffit de s'arrêter après le 5 '\n' ou '\r'.
Le pointeur sera directement là où tu veux.

int i=0;
char c;
file = fopen("tonfichier.txt","r+");
for(i=0;i<5;i++)
{
c = getc(file);
if( c != '\n' )
i--;
}
// le pointeur est positionné, le prochain caractère sera (normalement) le premier caractère de la ligne 6.

Le CyberMonde nous offre une meilleur qualité de vie
CyberMan.inc The WebSite
0
PepeDeLuxe Messages postés 14 Date d'inscription samedi 22 mai 2004 Statut Membre Dernière intervention 29 avril 2005
1 avril 2005 à 13:27
Hello



Alors pour ceux que ça intéresseraient je n'ai pas trouvé de solution
simple pour écrire à un endroit précis dans un fichier...bon d'accord
je ne suis pas un expert de la prog.. mais bon...

minet03 ta solut ne fonctionne pas car je pense qu'il faut faire une distinction entre la tête de lecture et d'écriture....

Je que je vais faire c'est mémoriser le buffer à intégrer et copier le
fichier vers un fichier bis,avec CopyFile par exemple, puis
recopier dans l'ancien fichier le nouveau fichier bis jusqu'à la ligne
à modifier y inserer le buffer puis terminer de recopier le fichier bis
dans le fichier...

Un peu chiant mais je pense que c'est la seule solution ...



Voila et merci pour votre patiente...
0
anarchysniper Messages postés 65 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 29 septembre 2005 1
1 avril 2005 à 14:46
Pour comprendre la méthode à utiliser il faut voir les choses du point
de vue de l'ordinateur. Pour lui, un saut de ligne n'est qu'un
caractère comme un autre et ce n'est qu'à l'affichage qu'il est utilisé
au travers de son code ASCII pour adapter la mise en page au centre
nerveux lent et imparfait qui nous fait office d'unité de traitement
communément appelée cerveau.



La fonction existe surement quelquepart mais elle ne peut être qu'une
variante de ce que minet03 a proposé. Personnellement je formulerais
plutôt la chose avec un while testant le caractère \n imbriqué dans un
for testant le nombre d'occurences du caractère déjà rencontrées, cela
évitera de trop toucher à i ! Le tout avec une petite structure de
contrôle vérifiant qu'on est pas à la fin du fichier histoire de ne pas
se cogner à l'infini à un rébarbatif message d'erreur du style
end_of_file.



Par contre, minet, je ne sais pas ce que tu as voulu faire car tu
testes à l'infini le même caractère puisque tu ne décales pas la
position de la lecture dans le fichier, si encore le getc marche ...
0

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

Posez votre question
minet03 Messages postés 415 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 2 décembre 2005 3
1 avril 2005 à 18:20
En fait si tu fais le test avec getc() (exemple ce que j'ai fait avec
un printf), on s'apercoit que getc() avance le pointeur dans le flux.
Donc mon exemple marche (je l'ai même tester avec Turbo C++)

Le CyberMonde nous offre une meilleur qualité de vie
CyberMan.inc The WebSite
0
Rejoignez-nous