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 Perl Discussion :

Découper une chaine de caractère


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Par défaut Découper une chaine de caractère
    Bonjour,

    J'ai à afficher un paragraphe de texte dont la longueur est variable.

    Pour des questions de mise en forme, je souhaiterais pouvoir découper cette chaine de caractères en sous-chaines d'une longueur de 50 caractères max afin de les afficher individuellement...

    Bien entendu, il faut penser à la coupure des mots, et c'est là que je ne sais pas comment faire.

    Si quelqu'un a une idée.

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    niveau méthodologie je dirais :

    - découper ton texte via la méthode split() et le separateur "espace" afin de récupérer des mots...
    - Concaténer ces mots jusqu'à ce que l'ajout d'un prochain mot fasse passer la longueur de la chaîne au delà de 50.

    Il y a peut être plus simple mais la de tête je vois pas

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Une expression régulière de ce type devrait également faire l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @short_texts = $long_text =~ /(.{1,50})\s/g;

  4. #4
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    Cher Philou, ton expression m'intrigue...
    Je ne conteste pas sa véracité, loin de la, mais j'aimerais que tu détail :

    - comment repère tu les caractères espace pour délimiter les mots ?
    - comment l'expr sait-elle qu'elle doit recommencer à parser à tel endroit de la chaîne ?

    Je ne suis pas encore super à l'aise avec les expr, donc je ne demande qu'a apprendre plus ! J'aime me coucher moins bête que la veille...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Par défaut
    J'ai trouvé une solution...

    J'ai trouvé un module qui fait ça tout seul: Text::Wrap

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    use Text::Wrap;
    $Text::Wrap::columns = 50;
    $Text::Wrap::separator = "\n";
    print wrap("","",$long_text);

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    @michon :
    1- comment repère tu les caractères espace pour délimiter les mots ?
    L'expression régulière recherche jusqu'à 50 caractères quelconque et DOIT être suivie d'un espace. Je ne me préoccupe donc pas des mots, mais simplement de "couper" les motifs avec un espace.
    2- c'est le propre du moteur de recherche de motif que de continuer là où il s'est arrêté, l'option /g permettant de lui demander de répéter jusqu'à ce que le motif ne soit pas trouvé.
    Pour comprendre le détail, voir l'aide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perldoc perlretut; # paragraphe "Global matching"

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

Discussions similaires

  1. Bash - Découper une chaine de caractères
    Par nicolas.pissard dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 16/12/2014, 13h18
  2. Découper une chaine de caractères
    Par momomafioso dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/06/2007, 11h11
  3. [SQ2K] Découper une chaine de caractères
    Par maitrebn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2007, 19h22
  4. Réponses: 6
    Dernier message: 15/04/2007, 13h06
  5. [VBA] Découper une chaine de caractères
    Par rantanplan81 dans le forum VBA Access
    Réponses: 3
    Dernier message: 12/04/2007, 15h26

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