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 :

modification de fichier EOF


Sujet :

C

  1. #1
    Membre régulier Avatar de scorbo
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 176
    Points : 83
    Points
    83
    Par défaut modification de fichier EOF
    Salut,

    j'aimerai modifier un fichier texte. C'est-à-dire rajouter ou supprimer des caractères pouvant se trouver au beau milieu du texte.
    En rajouter n'est pas vraiment un problème, le problème c'est d'en supprimer ! Y-a-t-il moyen de supprimer des caractères d'un fichier texte de telle sorte que la taille du fichier devienne plus petite ?

    Est-ce que le ait d'écrire le caractère EOF peut remédier à mon pb ?

    merci

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Le probleme se pose aussi bien pour en rajouter que pour en supprimmer, en effet si tu rajoute des caracteres au milieu du texte, ils ne vont pas s'inserer entre ceux deja present mais les ecraser.

    La solution la plus simple pour regler ces deux problemes, c'est de lire le fchier que tu traites et de te servir d'un autre fichier pour la sortie, puis de supprimmer le premier fichier et de renommer le second.

  3. #3
    Membre régulier Avatar de scorbo
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 176
    Points : 83
    Points
    83
    Par défaut
    je disais qu'il n'y a pas vraiment de problème pour en rajouter car il est facile de décaler les caractère un à un jusqu'à la fin du fichier.
    Alors que pour en supprimer, c'est le même principe, mais si qui me gêne c'est que la taille du fichier ne diminuera pas.

    J'ai utilisé le principe que tu proposes, mais je le trouve un peu bourrin !

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Un peu bourrin moi si y'en a un qui a d'autres idées la dessus je suis preneur car j'ai du mal a voir comment on pourrait faire autrement
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Perso moi je trouve que décaler un tableau caractère par caractère est plus bourin que de passer par une fichier temporaire !
    Et je pense que ton proc sera du meme avis

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Si ca te gene d'utiliser un deuxieme fichier et que le fichier n'est pas trop gros tu peux le monter le lire pour le mettre integralement en memoire, puis reouvrir le fichier en mode w (tu le detruit donc) et reecrire le tableau dans ce fichier en faisant les traitements qadequat mais c'est autant bourrin.

    Sinon en recherchant sur le forum je suis retombe sur ce post qui presente les fonction truncate et ftruncate. Malheureusement elles ne sont pas standards, donc a verifier si dans ton cas tu peux les utiliser

  7. #7
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Points : 83
    Points
    83
    Par défaut
    Moi, j'ai fait exactement ce que tu cherches à faire...

    Voici le code d'une fonction qui avait pour but d'extraire la dernière ligne texte d'un fichier du même type.

    Remarque si tu ne veux pas lire tout le code ci-dessous que la seule fonction qui t'interesse vraiment est la fonction : chsize

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    int BufferSortirTrame(char * pcTrameAExtraire)
    {
      FILE *fp;
      char tcNomFichier[20];
      char tcLignePrec[100];
      char tcLigne[100];
      int iBuffReadLine=0;
      long lNouvelleTaille=0;
     
     
      strset(tcLigne,0x00);
      strset(tcLignePrec,0x00);
      strset(tcNomFichier,0x00);
      strcpy(tcNomFichier,"C:\\essai.txt");
     
      fp=fopen(tcNomFichier,"r+t");
      if(fp==NULL)
      {
        // Le fichier n'a pas pu etre ouvert
        return 0 ;
      }
      else
      {
        while((iBuffReadLine=BuffReadLine(fp, tcLigne)))
        {
          strset(tcLignePrec,0x00);
          strcpy(tcLignePrec,tcLigne);
          strset(tcLigne,0x00);
        }
        fseek(fp,0,SEEK_END);
        lNouvelleTaille = ftell(fp);
        fclose(fp);
     
        strset(pcTrameAExtraire,0x00);
        strcpy(pcTrameAExtraire,tcLignePrec);
        if(pcTrameAExtraire[strlen(pcTrameAExtraire)-1]=='\n')
          pcTrameAExtraire[strlen(pcTrameAExtraire)-1]=0x00;
        {
          int iHandle;
     
          lNouvelleTaille = lNouvelleTaille - strlen(pcTrameAExtraire) - 2 ;
          if(lNouvelleTaille<=0)
          {
    	unlink(tcNomFichier);
    	return 1 ;
          }
          else
          {
    	iHandle = open(tcNomFichier,O_RDWR | O_TEXT);
    	if(iHandle==-1)
    	{
    	  // Impossible de tronquer le fichier
    	  strset(pcTrameAExtraire,0x00);
    	  return 0 ;
    	}
    	else
    	{
    	  chsize(iHandle,lNouvelleTaille);
    	  close(iHandle);
    	}
    	return 1 ;
          }
        }
      }
    }
    Pour mes développements, j'utilise :
    WinX-64bits, Delphi Tokyo 10.2.2
    Merci, merci, merci... moi aussi je vous aime, c'est trop d'émotions...
    Key user des blagues nulles

  8. #8
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Attention, chsize, tout comme truncate, n'est pas ANSI donc pas necessairement presente partout.

  9. #9
    Membre régulier Avatar de scorbo
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 176
    Points : 83
    Points
    83
    Par défaut
    Merci pour tout , je vais étudier la question, et faire un choix.

    Encore merci.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Juin 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 24
    Points : 26
    Points
    26
    Par défaut
    Si je puis me permettre, je connais deux méthodes pour inséser ou supprimer des données dans un fichier directement sur le disque.

    1) par ventilation/fusion, on passe par un fichier intermédiaire.

    2) par décalage, qui consiste à décaler, d'autant de caractères à insérer, la portion délimitée par le point d"insertion jusqu'a la fin du fichier.
    Le décalage est fait en une seule opération (petit fichier et petit buffer) ou en plusieurs opérations (gros fichier et buffer d'une taille limitée).
    On commence le décalage par la fin du fichier. Lorsque cette opération est terminée, il ne reste plus qu'à écrire à l'endroit laissé libre par le décalage.

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

Discussions similaires

  1. Outil pour modification de fichiers html par lots
    Par Tavernier dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 19/08/2005, 09h21
  2. Modification de fichier XML avec XSLT
    Par osmoz dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/07/2005, 11h04
  3. [JAR]Modification de fichier dans un jar
    Par vberetti dans le forum Général Java
    Réponses: 14
    Dernier message: 13/06/2005, 17h56
  4. [langage] [Fichier]problème modification de fichier
    Par Melchisedec dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2004, 23h01
  5. [ICS FtpClient] Date modif de fichier et listage de dossier
    Par Ingham dans le forum Composants VCL
    Réponses: 8
    Dernier message: 13/06/2004, 19h54

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