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

Langage PHP Discussion :

Moditfier une ligne dans un fichier texte en SANS réecrire tout le fichier


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 30
    Points
    30
    Par défaut Moditfier une ligne dans un fichier texte en SANS réecrire tout le fichier
    Bonjour,

    tout est dans le titre. Je débute dans la manipulation de fichier en PHP et je ne trouve pas de méthode pour mon cas.

    Je veux pouvoir remplacer une ligne dans un fichier texte en utilisant la méthode suivante :

    1) Ouvrir le fichier
    2) Placer le pointeur sur une ligne particulière en faisant une recherche style indexOf()
    3) Effacer cette ligne
    4) Réecrire uniquement cette ligne
    5) Fermer le fichier.

    Première question : est ce un bon algorithme ?
    Deuxième question : quelle fonction puis je utiliser pour déplacer le pointeur sur une ligne particulière ? j'ai trouver fseek() mais il attend un int pour se positionner.

    Merci à vous !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Tu ne peux pas, tu dois réécrire tout le fichier.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Donc la manipulation de fichier est prévu uniquement pour les petits fichiers ?
    Parce que réécrire un fichier de 100mo pour changer une lettre c'est pas forcément optimisé quoi... d'un autre côté je ne vois pas quel utilisation faire d'un fichier de 100mo...

    Enfin merci à toi !

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Oui il n'y a pas de pointeur en PHP de toute facon comme tu l'as souligné avoir besoin de modifier un fichier de 100Mo pour un site web, y'a un truc qui a mal été évalué durant la conception.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 55
    Points
    55
    Par défaut
    bonsoir, j'ai exactement les meme besoins mais je ne trouve pas de solution je ne peux pas reecrire tous le fichier j'avais pensé a mettre le contenu dans un tableau mais apres je ne sais pas
    quelcun aurait une reponse ??

  6. #6
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Citation Envoyé par pitichamo Voir le message
    quelcun aurait une reponse ??
    Utiliser une vraie base de donnée ^^

    Comme dit plus haut, si les fichiers sont aussi volumineux, c'est qu'il a y un problème de conception à la base ^^

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    Utiliser une vraie base de donnée ^^

    Comme dit plus haut, si les fichiers sont aussi volumineux, c'est qu'il a y un problème de conception à la base ^^
    Oui ça parait évident. Mais là n'est pas le problème.
    Ça me parait quand même bizarre d'être obligé de réécrire tout un fichier pour simplement modifier une ligne.

    Qu'est ce que vous pensez de ça :

    -charger tout le fichier en lecture seul dans une String
    -faire une recherche sur l'expression à remplacer avec strpos (). Cette fonction renvoie la position de la chaîne recherchée
    -faire fseek(taille_que_l_on_vient_de_trouver_avec_strpos)
    -écrire...

  8. #8
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    en terme de complexité, ça revient au même que de réécrire tout le fichier...

    en terme d'exemple, c'est bien si tu modifies la 1iere ligne et ça revient au meme que de réécrire dans le cas de la derniere ligne (ce qui rejoint la complexité ^^)

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Pas forcément en terme décriture,

    dans les deux cas que tu cites on ne réécrit qu'une ligne non ?

  10. #10
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    en terme d'écriture non, mais de toute facon, tu accède au fichier....

    1 fois pour lire
    1 fois pour écrire

    donc ça revient au même ^^

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 55
    Points
    55
    Par défaut
    bonjour, je te dirige vers une autre discussion que j'ai ouvert et ou la solution est bien claire grave à darkstar123456
    merci a qui merci a moi et a darkstar123456

    http://www.developpez.net/forums/d77...er-ecrire-php/

  12. #12
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    yep mais ici ce qui est importe c'est la complexité ^^

    et donc, comme je l'ai dit plus haut dans mon exemple, avec 2 tests concrets différents on aurait :

    1] modification 1iere ligne => énormément de gain
    2] modification dernière ligne => 0 gain

    la complexité ne se calculant que par rapport à du code et non par rapport à des exemples précis, on prend toujours "le pire cas"... la complexité de ton code est donc identique à celle de réécrire entièrement le fichier : 2*O(n)

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

Discussions similaires

  1. Sauter une ligne dans un controle "Text Box"
    Par Nitsuja dans le forum IHM
    Réponses: 3
    Dernier message: 05/08/2011, 15h19
  2. Réponses: 4
    Dernier message: 14/06/2011, 17h58
  3. Réponses: 6
    Dernier message: 07/06/2011, 11h00
  4. [AC-2003] Extraction d'une ligne dans un champ texte multiligne
    Par LHT dans le forum Access
    Réponses: 2
    Dernier message: 05/05/2011, 10h13
  5. Supprimer une ligne dans un fichier text
    Par philippe13 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 14/03/2006, 16h43

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