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 :

[Tableaux] Remplacer uniquement '\n' et pas ne pas toucher à '\\n'


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut [Tableaux] Remplacer uniquement '\n' et pas ne pas toucher à '\\n'
    Bonjours,

    voilà, j'ai une string qui contient:
    $string = 'le contenu classique\nd\'un textarea\navec des saut de ligne';

    /*le contenu classique
    d'un textarea
    avec des saut de ligne*/ <= initialement saisie

    pour conserver cette string dans une base de donné, je la garde en 1 seul ligne (serialize oblige), c'est pour ça que les sauts de ligne sont converti en \n plutôt qu'en saut de ligne.

    J'aimerai savoir (après plusieurs jours de recherche sans réponses) comment je peux faire pour affiché cette string avec le saut de ligne (et uniquement transformé les \n pas les \\n (si la personnes entre \n elle même)?

    echo preg_replace('/\\\n/', "\n", $string);

    le problèmes est que cette expression régulière transformera les \\n (qui sont des valeurs saisie et non des saut de ligne dans le textarea) en \saut de ligne.

    je vous remercie d'avance pour votre aide, si je ne suis pas claire, s'il vous plait ditent le moi...

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    tu n'es pas obligé d'utiliser "serialize" pour mettre tes données dans la base de données. tu peux utiliser un champ "BLOB" et garder les sauts à la ligne

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    j'utilise serialize pour mettre dans un fichier texte
    et ensuite j'utilise file() pour tout récupéré, file() prend ligne par ligne.

    Si tu peux me détaillé BLOB? (j'ai rien trouvé)
    http://fr.php.net/manual-lookup.php?pattern=BLOB

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par juJuv51
    Si tu peux me détaillé BLOB? (j'ai rien trouvé)
    http://fr.php.net/manual-lookup.php?pattern=BLOB
    BLOB est type de données de MySQL

    pourquoi tu passes par un fichier ? donne nous toutes les étapes de l'utilisation de ce texte comme ça on pourra mieux te conseiller

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    Je suis obligé de passé par des fichiers, tout simplement parce que mon serveur n'a pas MSQL

    ma base de donné est fichiers.

    merci pour la précision sur BLOB

    Sinon, pour des précisions:

    je stock des informations avec serialize dans un fichier que j'ouvre par la suite avec file()

    une fois que je récupère une ligne, j'aimerai transformé les \n en saut de ligne.

    merci mathieu

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par juJuv51
    une fois que je récupère une ligne, j'aimerai transformé les \n en saut de ligne.
    une fois que tu as recupéré le contenu, il sufft d'utiliser la fonction http://php.net/unserialize et le texte aura de nouveau la forme originale comme l'a saisi le visiteur

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    Le problème c'est que j'utilise file pour la récupération ligne par ligne des array serializer,
    donc si une valeur contient un saut de ligne, automatiquement, le file renvra un array serializer incomplet, c'est pour ça que tout les saut de ligne sont converti en \n (visible).
    De façon à ce que le serialize soit sur une seul ligne.

    Pour que mon unserialize soit totalement identique aux valeurs envoyé par le textarea, il me suffit de faire l'inverse, convertir les \n en saut de ligne,
    mais le problème c'est que je ne trouve pas comment faire pour que les \n soit converti en saut de ligne, sans que les \\n par exemple le soit aussi (alors que je ne veut pas).

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    Avec preg_replace, il est possible de supprimer par exemple:
    \n mais pas \\n?

    (je pense que c'est le plus simple parce que j'ai vraiment besoin d'aide, je ne connais pas grand chose aux expression régulière...)

  9. #9
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    une idée comme ça :

    tu remplace \\n par une suite de caractères spécifique (#{]#) par exemple

    tu remplace tes \n 'normaux'

    tu re-remplace tes caractères spécifique (#{]#) par \\n

    non ?
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    Merci, je pensé qu'il été possible de traité uniquement des suites de caractères avec les expressions régulières sans à avoir à en traité des similaires, pouvoir exclure sans certaine condition...

    Je sais que dans PHPMyAdmin, lorsque l'on crée une sauvegarde de la base de donné, toute les requêtes sont sur une seul ligne, les saut de lignes sont alors remplacé par des \n

    Ensuite lorsque l'on restaures la base de donnée sans saut de ligne (converti en \n) les sauts de ligne sont crée pour être remis dans la base de donnée...

    J'ai eu beau cherché, je n'ai pas trouvé comment...

    Je pense que je vais faire comme ça j'attends jusqu'à ce soirs si j'ai pas de réponses qui vont dans le sens ou je l'entend et je mettrai Résolu

    Merci pour votre aide...

  11. #11
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par juJuv51
    Le problème c'est que j'utilise file pour la récupération ligne par ligne des array serializer
    c'est là que tu simplife code alors, utilise la fonction http://php.net/file_get_contents pour récupérer le fichier d'un coup
    tu peux même faire ça en une seule ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tableauPhp = unserialize(file_get_contents('fichierTexte.bdd'));

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    Le problème c'est que je suis obligé de gardé file(),
    car j'utilise les lignes comme des ID (références), et je ne peux pas crée 1 fichier par saisies

    Merci pour ton aide

  13. #13
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par juJuv51
    Le problème c'est que je suis obligé de gardé file(),
    car j'utilise les lignes comme des ID (références), et je ne peux pas crée 1 fichier par saisies

    Merci pour ton aide
    tu n'as qu'à mettre la réference dans le tableau PHP avant de le "serializer" (on va y arriver )

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    merci

    :s le problème des fichiers c'est que plus y'a de saisie plus ils sont dure à traité avec file, ça permet de directement allez aux bonne endroit.

    je ne peux pas mettre de référence (très bonne idée pourtant) car si le fichier dépasse une certaine taille, il sera trop long à traité (ouvrir tout le fichier pour avoir toute les références pour ensuite commencé à trier) pour la simple visons d'informations

    avec file, la référence est le numéro de la ligne donc il n'y à pas besoin d'ouvrir tout le fichier pour obtenir juste le serialize qu'il me faut :p

    (on va y arrivé ;p je m'en fait pas :p et encore merci à toi)

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    hello,

    avec file, la référence est le numéro de la ligne donc il n'y à pas besoin d'ouvrir tout le fichier pour obtenir juste le serialize qu'il me faut :p
    petite précision quand meme... file() ouvre tout le fichier lorsque tu l'utilises. si tu ouvres un fichier de 10000 lignes, tu te retrouve avec un tableau à 10000 indexes. certes l'index 362 est directement accessible, mais tu as quand meme chargé 9999 autres trucs inutiles.

    bref... utilise une base de données. il parait que c'est fait pour ça
    Pourfendeur de singletons en croisade

  16. #16
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par juJuv51
    avec file, la référence est le numéro de la ligne donc il n'y à pas besoin d'ouvrir tout le fichier pour obtenir juste le serialize qu'il me faut :p
    si avec la fonction http://php.net/file tout le fichier est lu

    par contre je suis d'accord que le "unserialize" prendra peut être plus de temps.

    ça me fait penser à une autre solution : après avoir lu la case du tableau lu avec "file" tu peux utiliser la fonction "unserialize" juste sur cette chaine

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    Merci pour la précision
    effectivement je suis naïf de pensé que file ouvré rien que ce que je lui demandé

    je ne peux pas utilisé de base de donnée tout simplement parce que MySQL est pas installé sur mon serveur (a cause d'une installe foireuse il ne veut pas s'installé...)


    Donc je fais toujours sans.

    Est t'il possible d'ouvrir un fichier à des zones prédéfinie?

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    Citation Envoyé par mathieu
    ça me fait penser à une autre solution : après avoir lu la case du tableau lu avec "file" tu peux utiliser la fonction "unserialize" juste sur cette chaine
    ce que je fais actuellement, mais file s'arrête aux saut de ligne, donc si la chaine ne contient pas ce qu'il faut, elle retourne une erreur

    erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $file[0] = 'a:1:{s:4:"data";s:40:"Bonjours,\r\nvoici le';
    $file[1] = 'tout premier test.";}';

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Est t'il possible d'ouvrir un fichier à des zones prédéfinie?
    oui, mais c'est pas simple et toujours pas aussi optimal qu'une base de données.

    peut etre qu'une solution serait de "défoirer" ton install. sinon si tu as php5 tu peux te tourner vers sqlite qui est tres bien.
    Pourfendeur de singletons en croisade

  20. #20
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par juJuv51
    je ne peux pas utilisé de base de donnée tout simplement parce que MySQL est pas installé sur mon serveur (a cause d'une installe foireuse il ne veut pas s'installé...)
    au lieu de passer du temps sur ce problème, tu ne veux pas essayé de résoudre ça et d'avoir un vraie SGBDR ?
    parce que là on essaye de réinventer le comportement d'une bdd donc ce n'est pas constructif

    Citation Envoyé par juJuv51
    Est t'il possible d'ouvrir un fichier à des zones prédéfinie?
    ça c'est le problème du système d"exploitation donc là aussi on va finir par réinventer la roue puisqu'une solution serait d'avoir un index dans le fichier (ou bien plusieurs fichiers)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [CLUSTER] pas PVM pas MPI pas condor ni batcheur
    Par frp31 dans le forum Administration système
    Réponses: 0
    Dernier message: 15/03/2011, 11h27
  2. Réponses: 5
    Dernier message: 04/12/2006, 15h38
  3. [Tableaux] un problème que je ne vois pas?
    Par Skeud007 dans le forum Langage
    Réponses: 11
    Dernier message: 07/10/2006, 23h24
  4. [Tableaux] Une erreur que je ne comprend pas
    Par bibom dans le forum Langage
    Réponses: 2
    Dernier message: 01/08/2006, 18h47
  5. [Tableaux] Délai de traitement d'une page pas assez long
    Par Alexlesilex dans le forum Langage
    Réponses: 14
    Dernier message: 15/05/2006, 17h40

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