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 :

aide à propos de construction de chaine de caractere


Sujet :

Langage PHP

  1. #1
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2009
    Messages : 447
    Points : 241
    Points
    241
    Par défaut aide à propos de construction de chaine de caractere
    Bonjour à tous,
    bon j'ai un fichier texte, qui contient les données comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    N=0,x=23928392,y=2091039,zone=1
    N=0,x=59091212,y=6766566,zone=1
    N=0,x=23928392,y=2091039,zone=1
    N=1,x=45450909,y=6766566,zone=1
    N=1,x=23928392,y=2091039,zone=1
    N=1,x=45450909,y=6766566,zone=1
    N=2,x=23928392,y=2091039,zone=2
    N=2,x=23928192,y=6766566,zone=2
    N=2,x=23928392,y=2091039,zone=2
    N=3,x=23928392,y=2091039,zone=2
    N=3,x=23928192,y=6766566,zone=2
    N=3,x=23928392,y=2091039,zone=2
    aprés que je crée les variable pour stocker ce contenu comme ça:

    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
    19
    20
    21
    22
    23
    24
     
     
    $lines = file('C:\file.txt', FILE_IGNORE_NEW_LINES);
    $data = array();
    for($i = 0, $c = count($lines); $i < $c; $i++)  {
        $line = explode(',', rtrim($lines[$i]));
     if(strlen(rtrim($lines[$i])) != 0) {
        $n = explode('=', $line[0]);
        $n = $n[1];
     
        $data[$n][] = $lines[$i];
     
        $x = explode('=', $line[1]);
        $x = $x[1];
     
     
        $y = explode('=', $line[2]);
        $y = $y[1];
     
        $z = explode('=', $line[3]);
        $z = $z[1];
     
        echo 'N='.$n.',x='.$x.',y='.$y.',zone='.$z.'<br>';
    }
    le contenu s'affiche comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    N=0,x=23928392,y=2091039,zone=1
    N=0,x=59091212,y=6766566,zone=1
    N=0,x=23928392,y=2091039,zone=1
    N=1,x=45450909,y=6766566,zone=1
    N=1,x=23928392,y=2091039,zone=1
    N=1,x=45450909,y=6766566,zone=1
    N=2,x=23928392,y=2091039,zone=2
    N=2,x=23928192,y=6766566,zone=2
    N=2,x=23928392,y=2091039,zone=2
    N=3,x=23928392,y=2091039,zone=2
    N=3,x=23928192,y=6766566,zone=2
    N=3,x=23928392,y=2091039,zone=2
    ok, maintenant je voudrais créer deux chaines(chaine1 pour zone1 et chaine2 pour zone2) qui ont la forme suivant:
    ((x y,x y,x y),(x y,x y)), bon pour mon cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    chaine1=((23928392 2091039,59091212 6766566,23928392 2091039), // pour N=0
    (45450909 6766566,23928392 2091039,45450909 6766566)) //pour N=1
    chaine2=((23928392 2091039,23928192 6766566,23928392 2091039), // pour N=2
    (23928392 2091039,23928192 6766566,23928392 2091039)) // pour N=3
    chaine1 contient les lignes qui appartient au zone1.et pour chaque N représente un (x y,x y,x y.. )

    Merci pour l'aide ,
    Crdt

  2. #2
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Salut,

    Voila un code qui devrait faire l'affaire :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    <?php
     
    $lines = file('C:\wamp\www\test\file.txt', FILE_IGNORE_NEW_LINES);
    $data = array();
    for($i = 0, $c = count($lines); $i < $c; $i++)  {
        $line = explode(',', rtrim($lines[$i]));
        if(strlen(rtrim($lines[$i])) != 0) {
            $n = explode('=', $line[0]);
            $n = $n[1];
     
            $x = explode('=', $line[1]);
            $x = $x[1];
     
            $y = explode('=', $line[2]);
            $y = $y[1];
     
            $z = explode('=', $line[3]);
            $z = $z[1];
     
            if (!isset($data[$z]) || !isset($data[$z][$n])) {
                $data[$z][$n] = array($x, $y);
            } else {
                array_push($data[$z][$n], $x, $y);
            }
        }
    }
     
    foreach ($data as $zone => $array) {
        foreach ($array as $nRef => $array2) {
            if (!isset($nMin) || $nRef < $nMin) {
                $nMin = $nRef;
            }
            if (!isset($nMax) || $nRef > $nMax) {
                $nMax = $nRef;
            }
        }
     
        for ($cpt = $nMin; $cpt <= $nMax; $cpt++) {
            $nData[$cpt] = implode(',', $data[$zone][$cpt]);
        }
     
        $chaine[$zone] = '((' . implode('),(', $nData) . '))';
        unset($nData);
        unset($nMin);
        unset($nMax);
    }
     
    var_dump($chaine);

  3. #3
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2009
    Messages : 447
    Points : 241
    Points
    241
    Par défaut
    Bonjour,
    Merçi beaucoup amoiraud, c'est bien ce que je veux , mais j'aimerais bien supprimer la virgule entre deux nombre X et Y .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((23928392,2091039,59091212,6766566,23928392,2091039),(45450909,6766566,23928392,2091039,45450909,6766566))
    pour qu'elle soit comme sous cette forme une espace entre x et y:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((23928392 2091039,59091212 6766566,23928392 2091039),(45450909 6766566,23928392 2091039,45450909 6766566))
    j'ai modifié la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nData[$cpt] = implode(',', $data[$zone][$cpt]); // j'ai mis espace à la place de ','
    mais tous les virgules sont remplacé par espace!!
    comment puis je faire pour faire .
    Crdt

  4. #4
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    De rien, pour mettre des espaces il suffit de remplacer le if de la ligne 21 par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (!isset($data[$z]) || !isset($data[$z][$n])) {
        $data[$z][$n] = array($x . ' ' . $y);
    } else {
        array_push($data[$z][$n], $x . ' ' . $y);
    }
    Et pense bien a remettre une virgule en paramètre de l'implode ligne 40

  5. #5
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2009
    Messages : 447
    Points : 241
    Points
    241
    Par défaut
    trés bien ,Merci pour l'aide ,c'est ça ce que je veux, je vous remercie infiniment amoiraud,

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 13/05/2013, 16h59
  2. [Batch] Aide pour supprimer une chaine de caractere
    Par colapsus dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 02/06/2011, 19h15
  3. Réponses: 8
    Dernier message: 17/03/2008, 17h55
  4. besoin d'aide sur les chaine de caractere
    Par nico85 dans le forum C++
    Réponses: 10
    Dernier message: 13/01/2007, 12h03
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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