IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

fonction effacer ligne


Sujet :

C

  1. #1
    Membre confirmé Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Par défaut fonction effacer ligne
    re-salut,

    j'ai une fonction qui efface la ligne d'un document qu'on lui passe en parametre.

    au niveau du tout premier fgets, il me crache l'erreur "bus error (core dumped)"

    mais pourquoi donc? je ne comprends vraiment pas. j'ai une autre fonction qui commence ligne pour ligne de la même mannière, et tout se déroule bien.

    pouvez-vous m'aider?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include "biblio.h"
     
    void effacer (char * cheminfichier, int ligne)
    {
    	int i;
    	FILE * fichier;
    	char temp[200];
            //positionnement juste après la ligne à effacer
    	if (fichier = fopen(cheminfichier, "r+") != NULL)
    	{
    		for (i = 0; i < ligne; i++)
    		{
    			fgets(temp, sizeof(temp), fichier);//ça plante ici
    		}
    		//quand on arrive ici on a le curseur a la fin de la ligne a supprimer.
    		while(fgets(temp, sizeof(temp),fichier)!=NULL)
    		{
    			//prendre la ligne suivante et la mettre dans celle d'avant
    			fseek (fichier, (2*(sizeof(temp)/sizeof(char))), SEEK_CUR);
    			fputs(temp, fichier);
    			fseek (fichier, (sizeof(temp)/sizeof(char)), SEEK_CUR);
    		}
    	} 
    }

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (fichier = fopen(cheminfichier, "r+") != NULL)
    Je n'arrive jamais à me rappeler les priorités (et en plus, je ne veux pas m'encombrer la tête), je préfère écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fichier = fopen(cheminfichier, "r+");
    if (fichier != NULL)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre confirmé Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Par défaut
    ouilouilouille... il manquait une paire de parenthèse pour englober

    fichier = fopen(cheminfichier, "r+")

    c'est tout.

    tain je baisse moi..


    *va se pendre (après avoir terminé son projet)

    ...merci quand meme.

    Ca vous paraît viable comme solution?

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par crashtib Voir le message
    Ca vous paraît viable comme solution?
    Quel problème ? Quelle solution ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre confirmé Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Par défaut
    pour effacer un ligne d'un fichier....


    ....fin tu vas me dire t'as qu'à la tester. He ben c'est justement ce que je suis en train de faire figure-toi d'abord



    ... et évidemment elle marche pas.

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Toutes les lignes ont la même taille ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Membre confirmé Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Par défaut
    non, mais normalement le code devrait passer outre. (avec fgets qui s'arrête au \n)

  8. #8
    Membre confirmé Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Par défaut
    en fazit c'était pas sizeof mais strlen


  9. #9
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Sur un fichier texte, tu n'as la possibilité de faire fseek que
    - si le déplacement est 0 ou une valeur retournée par ftell
    - si la position de référence est SEEK_SET.

  10. #10
    Membre confirmé Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Par défaut
    certes.

  11. #11
    Membre confirmé Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Par défaut
    j'ai un autre problème :

    mon code supprime effectivement la ligne demandée mais duplique la dernière ligne du fichier, ce qui est chiant. J'ai pensé comme solution d'insérer un caractère de fin de fichier (si ça existe) juste avant la dernière ligne (celle en trop) mais je ne connais pas ce caractère. quelqu'un peut m'éclairer à ce sujet?

    question 2 : diogene le mec de ton avatar c'est pas glenn gould?

  12. #12
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    J'ai pensé comme solution d'insérer un caractère de fin de fichier (si ça existe) juste avant la dernière ligne (celle en trop) mais je ne connais pas ce caractère.
    Moi non plus.
    C'est pourquoi je procéderais différemment pour être sûr du comportement, en recopiant le fichier, moins la ligne incriminée, dans un autre puis en supprimant l'ancien fichier et en renommant le nouveau.

    question 2 : diogene le mec de ton avatar c'est pas glenn gould?
    Si !

  13. #13
    Membre confirmé Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Par défaut
    pas bête. le problème c'est que je dois effectuer ces opérations sur des fichiers extrêmement gros (>10Go). De plus je vois mal comment ne pas inclure la dernière ligne : arrêter la lecture une ligne avant? il faut connaître le nombre de lignes. lire jusqu'à trouver EOF puis fseek (une ligne en arrière)? long. copier les lignes une à une? oui mais comment savoir que la dernière ligne est a tel endroit et donc qu'il ne faut pas la recopier....

    bref un beau merdier

  14. #14
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    En passant par un autre fichier, tu n'as plus ce problème de trouver des éléments de la fin du fichier en supplément gratuit.

    Je ne crois pas qu'avec ta méthode, tu puisses tronquer le fichier. Tout ce que tu peux faire est d'écrire par dessus des blancs pour "effacer" les trucs en trop. Par exemple, avec N (= 1, 2, ...) le numéro de ligne à détruire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
      #define DIM(x) sizeof x/sizeof *x
      f = fopen("a.txt","r+");
      if(f!= NULL)
      {
         for(i=1; i< N && fgets(tab,DIM(tab),f)!= NULL;i++){}
         if(i == N)
         {
           wpos = ftell(f);
           if(fgets(tab,DIM(tab),f)!= NULL)
           {
             len = strlen(tab);
             while(fgets(tab,DIM(tab),f)!= NULL)
             {
               rpos = ftell(f);
               fseek(f,wpos,SEEK_SET);
               fputs(tab,f);
               wpos = ftell(f);
               fseek(f,rpos,SEEK_SET);
             }
             fseek(f,wpos,SEEK_SET);
             for(i=0;i<len+1;i++) fputc(' ',f);
             fputc('\n',f);  // si on veut garder un \n sur la dernière ligne
           }
         }
         fclose(f);
      }

  15. #15
    Membre confirmé Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Par défaut
    j'ai réfléchi tout le week-end (si, si) à une solutionn et là je débarque et tu mets des mots sur ce à quoi j'avais pensé. Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD8]effacer ligne d'une liste
    Par fanant dans le forum WinDev
    Réponses: 5
    Dernier message: 16/04/2007, 10h30
  2. [VBA-E]Efface ligne ne correspondant pas a mon Secteur
    Par baptbapt dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/08/2006, 09h40
  3. [VBA-E]Effacer ligne si une autre ligne est identique
    Par baptbapt dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/08/2006, 13h41
  4. [VBA-E] fonction effacer
    Par naynai dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/05/2006, 17h12
  5. effacer ligne arriere d'une GlutSphere
    Par killerjeff dans le forum OpenGL
    Réponses: 7
    Dernier message: 20/12/2005, 10h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo