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 :

Ajout espace + retour à la ligne boucle for


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 50
    Points : 29
    Points
    29
    Par défaut Ajout espace + retour à la ligne boucle for
    Bonjour,

    Je voudrais faire un traitement sur une variable qui contient les valeurs 3500 1750 1300 ou 435.
    Je voudrais que ma valeur en une seule ligne soit formaté sous un autre format, voici les opérations qu'il faudrait faire :
    pour chaque chiffre (de 3 ou 4 chiffre) alors
    • si 3 chiffres = ajouter 6 espaces avant
    • si 4 chiffres = ajouter 5 espaces avant
    • Au bout du 7eme nombre retour à la ligne. (car 6 colonnes)
      Et du coup supprimer l'espace déja présent


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    3500 1750 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 1300 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 435 435 435 435 435 435 435 435 435 435 9950 3500 1750 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 1300 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 435 435 435 435 435 435 435 435 1300 435 435 435 1300 435 1300 435 1300 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 1300 435 435 435 1300 435 1300 435
    Fichier bien formaté :
    (6 colonnes, 5 espaces avant tout nombre d'une longueur de 4 chiffres et 6 espaces devant chaque nombre de 3 chiffres et retour à la ligne après le 6eme nombre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
         3500     1600      435      435      435     1200
          435      400      435      435      435      435
          435      435      550      435      435      435
          435      435      435      400      435      400
          435      435      435      435      435     1300
          435      435      435      400      435      400
          435      400      435      435      435      400
          435      400      435     1300      435     1300
          435     1300      435      400      435      435
    ligne 1 : 5 espaces car (3500 vaut 4chiffres) puis 3500 puis 5 espaces à nouveau car 1600 vaut 4 chiffres, puis 6 espaces car 435 vaut 3 chiffres, puis 6 espaces + 6 espaces puis pour finir 5 espaces + retour à la ligne car 1200 vaut 4 chiffres et c'est le 6eme nombre.

    En gros tous les chiffres sont alignés à droite.

    Je pense bien à une boucle for mais pour la suite je ne vois pas

    Merci par avance pour votre aide

  2. #2
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Pour l'exemple, le code ci-dessous se contente d'afficher simplement (dans une balise <pre>) le résultat à l'écran.
    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
    <?php
    $str='3500 1750 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 1300 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 435 435 435 435 435 435 435 435 435 435 9950 3500 1750 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 1300 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 435 435 435 435 435 435 435 435 1300 435 435 435 1300 435 1300 435 1300 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 1300 435 435 435 1300 435 1300 435';
     
    // Création d'un tableau à partir de la chaîne
    $tab=explode(' ',$str);
     
    echo '<pre>';
     
    for($i=0;$i<count($tab);$i++){
    	// Sauter à la ligne après la sixième colonne
    	if($i>0&& $i%6==0)echo "\n";
     
    	// Affiche l'élément de tableau formaté à droite
    	echo str_pad($tab[$i],9,' ',STR_PAD_LEFT);
    }
     
    echo "<pre>\n";
    ?>
    À voir...

    explode qui retourne un tableau de chaînes.

    str_pad qui retourne une chaîne, complétée à droite, à gauche ou dans les deux sens, jusqu'à ce qu'elle atteigne une taille donnée.

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    il ne faut pas négliger la puissance des fonctions tableau de PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $str = '3500 1750 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 1300 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 435 435 435 435 435 435 435 435 435 435 9950 3500 1750 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 1300 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 435 435 435 435 435 435 435 435 1300 435 435 435 1300 435 1300 435 1300 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 1300 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1300 435 435 435 435 435 1300 435 435 435 1300 435 1300 435';
     
    // on sépare les données sur les espaces (explode), on les aligne à droite sur une longueur de 9 caractères (array_map) et on divise le tout en groupe de 6 éléments (array_chunk)
    $data  = array_chunk(array_map(function($p) { return sprintf('%9s', $p); }, explode(' ', $str)), 6);
    echo '<pre>';
    array_map(function($p) { echo implode('', $p), '<br>'; }, $data);

  4. #4
    Nouveau membre du Club
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 50
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    Je vous remercie ça fonctionne parfaitement

    Encore merci

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

Discussions similaires

  1. recupérer n-1 pour la première ligne-boucle for
    Par magictol53 dans le forum MATLAB
    Réponses: 2
    Dernier message: 01/11/2013, 17h41
  2. [Débutant] Coincée : Comment ajouter des retours à la ligne dans un fichier texte ?
    Par Alphacom dans le forum Windows Forms
    Réponses: 9
    Dernier message: 26/04/2013, 11h55
  3. Réponses: 1
    Dernier message: 27/02/2009, 01h57
  4. écriture à la ligne boucle for + echo ?
    Par nekcorp dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 05/11/2008, 18h10
  5. Réponses: 2
    Dernier message: 08/03/2007, 12h06

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