[PHP] Expression régulière - formatter un texte selon un certain nb d

Non, ta tête n’est pas trop petite pour ça, mais j’explique mal, et je ne suis pas très syntétique.

L’analyse de ton 1er post ressemble à une grammaire, ça consiste à découper tout ton texte en sous partie qui veulent dire quelque chose pour toi:

les A, B, C correspondent aux identifiant que j’utilisait dans ma grammaire. Ne te laisse pas rebuter par mon formalisme qui te parait obscur, utilise le tient comme tu l’a écris, et essaie de découper avec de fonctions “basique” tes éléments A, B, C… dans des fonctions séparées, (en limitant le plus possible l’impact entre les fonctions pour éviter les bugs)

Juste que moi, j’aurit utilise des noms plus “parlant” et remplacé A,B,C,D,E,F,G,H,I respectivement par ID_MESSAGE NOM, D,E,DATE, LIGNE_VIDE, MESSAGE

après:
une fonction “lire_entête” pour lire l’entête avec les noms et date,(par ex en utilisant une regexp) et qui s’arrête au premier retour chariot
une fonction “lire_message” qui ignore les lignes vides, et qui s’arrête dès qu’une ligne contient un “posté le”, et ignore cette ligne.

Une fonction principale qui boucle entre les deux

à toi de voir… dès qu’un algo te semble compliqué, un fonction trop longue, tu tente de redécouper…

Edit: D et E, je ne savais pas à quoi ça correspondait, mais c’est pas important.

mais lorsque tu dis "fonctions basiques", tu penses à quoi en php?

PHP, jamais fait, mais c’est un langage évolué, tu peux faire tes fonctions non? (comme en C quoi)
Ensuite c’est à toi de faire les fonctions pour découper ton projet… fonctions basiques = fonctions simples: pas plus de 200 lignes, des fonctions de bases appelées par un fonction une “couche” au dessus pour gérer l’ensemble… suis pas sûr de comprendre la substance de ta question, tu veux savoir quoi mettre dedans? Si c’est ça, c’est en le codant que tu doit t’en rendre compte, faire des essais successifs, bref, je n’ai pas de réponses miracles.

ce que je voulais savoir, mais c’est sans doute bête comme question, c’est quelle genre de “fonction” (fonction intégrée au langage, pas celle crée par l’utilisateur) il fallait utiliser pour découper une chaine. (exemple, faut il utiliser la fonction “ereg”, auquel cas on retombe ds les expression rationnelle…)

Ah ok, non par fonction basique, j’entend celles que tu crée (lire_nom(texte,position), lire_ligne(texte,position) ecrire_1message(nom, date,id,message) ) et qui te serviront de toolkit, les fonction PHP, je les connaît pas, mais les analyse d’expression régulières que tu utilise ont l’air très bien pour coder ces fonctions.

mais alors on revient au meme problème que j’avais initialement: cmt utiliser les expression régulière pour analyser cette chaine…

(j’ai l’impression qu’on tourne en rond…).

Non, simplement, il ne faut pas tout analyser avec une expression réfulière, il ne faut en utiliser que des simples, mais tu commence par découper le tout -sur des retours chariots, tu analyse ligne à ligne. il doit bien y avoir des fonctions de recherche de caractère dans PHP?

  • Sur la ligne d’en-tête: à priori, ça devrais tenir dans une expression régulière, sinon, tu recherche les blancs, et entre chaque blanc, tu analyse le contenu en lisant au pire caractère par caractère.

demande à “Sans-Nom” de tei donner des idées, l’équivalent des String.indexOf et des String.substr?

Comme je vois l’algo, mais c’est que mon point de vue, plein de solutions. Et je préviens tout de suite que ça ne respecte aucune norme…

  • Fonction principale:
    position1=début
    tant que "pas finit"
    position 2 = recherche retour chariot
    lireLigne ( souschaine (texte ,position1,position2) )

  • fonction lireLigne
    si texte contient "posté le"
    faire lireEntete
    sinon
    faire liremessage

  • fonction lireEntete
    A = liremot(texte,position)
    B = liremot(texte,position)
    tmp = liremot(texte,position)
    si tmp != "posté par"
    arrêter avec message "erreur de syntaxe"
    CDEFA = liremot(texte,position)
    // note: redécouper CDEFA avec des tirets
    F = liremot(texte,position)
    tmp = liremot(texte,position)
    si tmp != "le"
    arrêter avec message "erreur de syntaxe"
    G = liremot(texte,position)

  • fonction lireMessage
    variable in-out: Message
    si ligne != vide
    Message = Message + ligne

  • fonction liremot
    dans texte recherche " " à partir de position //espace
    retourner sous-chaine du texte depuis l’ancienne oistion jusqu’à la nouvelle.

bref du très manuel

String.indexof = strpos
String.substr = substr

oki, je vais chercher dans cette voix

merci bcp à ts les deux :love:

Evite d’être sourd en marchant sur la voie…

grrrr… on va essayer :stuck_out_tongue:

Je t’en prie, sur ce, je pars en vacances demain, alors je te souhaite bonne chance. :wink: