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 :

Extraire une zone particulière variable d'une chaine


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 48
    Points : 24
    Points
    24
    Par défaut Extraire une zone particulière variable d'une chaine
    Bonjour !
    Je travaille sur un projet effectuant la surveillance d'une installation. Ce projet est basée sur une Raspberry Pi qui récupère des infos tel que la température, l'hygrométrie, ... Ces informations de surveillance sont disponible sur une interface web développée en PHP 5.
    Comme ce système est autonome (pas d'action nécessaire de la part de l'utilisateur), j'ai fait un petit script shell permettant de mettre à jour la distribution Raspbian. Ce même script inscrit l'heure et la date dans un fichier .log qui se présente sous cette forme : MAJ effectuée - mardi 18 mars 2014, 09:12:26 (UTC+0100)
    C'est la première ligne qui est modifié à chaque fois qu'une mise à jour est faite (du moins lorsque le script est démarré via sa tâche CRON).
    J'aimerai pouvoir lire ce fichier via l'interface web. Pour le moment j'arrive à afficher la ligne entière en PHP (elle est extraite du fichier).
    Or, j'aimerai afficher ce résultat sur l'IHM : Dernière mise à jour de la distribution le mardi 18 mars 2014 à 09:12:26. La date et l'heure sont donc dans deux variables séparées

    Le problème c'est que la taille de la chaine $date changent selon le jour et le mois.
    Ma question est donc de savoir comment parvenir à extraire la date en fonction de sa taille ?

    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date = 'MAJ effectuée - mardi 18 mars 2014, 09:12:26 (UTC+0100)';
    echo 'Dernière mise à jour de la distribution le  ' . substr($date,16, -11);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Excuse-moi si je comprends mal ta question, mais si c'est de la classique manipulation de chaine, moi j'use et j'abuse de la fonction explode, qui transforme une chaîne en tableau en fonction d'un séparateur.

    http://www.php.net/manual/fr/function.explode.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $date='MAJ effectuée - mardi 18 mars 2014, 09:12:26 (UTC+0100)';
    $temp=explode(',',$date);
    $j=explode('-',$temp[0]);
    $j=trim($j[1]);
     
    $h=explode(' ',$temp[1]);
    $newDate='Dernière mise à jour de la distribution le '.$j.' à '.$h[1];
    echo $newDate;
    edit : je vois que j'ai été grillée par Sabotage,
    Son code, c'est pour si ton format est constant, mon code, c'est pour si tes séparateurs ne risquent pas de changer, mais tes longueurs entre deux, oui...
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 48
    Points : 24
    Points
    24
    Par défaut
    Bonsoir,
    Oui je connais explode, je l'utilise déjà dans le script.
    En fait, je cherche une autre solution car la taille de la chaine a extraire n'est pas fixe (enfin elle n'a pas un nombre fixe de caractère). En effet, il y a des jours avec 5 lettres et d'autres avec 8 lettres. Si j'utilise explode, je risque d'avoir ma chaine coupée en plein milieu.
    C'est donc pour ça que je cherche une autre solution que explode.

  5. #5
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    le code de Dendrite est correct quelque soit la longueur du jour


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $date='MAJ effectuée - mardi 18 mars 2014, 09:12:26 (UTC+0100)';
    $temp=explode(',',$date); //on coupe la chaine $date à la virgule :  "MAJ effectuée - mardi 18 mars 2014" et " 09:12:26 (UTC+0100)"
    $j=explode('-',$temp[0]);//on coupe la premier partie "MAJ effectuée - mardi 18 mars 2014" au "-" : "MAJ effectuée " et " mardi 18 mars 2014"
    $j=trim($j[1]);//on supprime les espaces de la seconde partie " mardi 18 mars 2014" : "mardi 18 mars 2014"
     
    $h=explode(' ',$temp[1]);// on coupe " 09:12:26 (UTC+0100)" aux espace : "" et "09:12:26" et "(UTC+0100)" 
    $newDate='Dernière mise à jour de la distribution le '.$j.' à '.$h[1]; //on utilise $j et la deuxième partie de $h
    echo $newDate;
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 48
    Points : 24
    Points
    24
    Par défaut
    Parfait, ça marche

    Merci à vous

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

Discussions similaires

  1. [AC-2007] Alimentation d'une zone de texte avec une zone de texte déroulante
    Par BRUNO71 dans le forum VBA Access
    Réponses: 3
    Dernier message: 26/12/2010, 19h54
  2. Réponses: 3
    Dernier message: 22/08/2010, 17h40
  3. Réponses: 13
    Dernier message: 02/04/2010, 11h10
  4. [DOM] Variable d'une Zone de Texte
    Par faressam dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/05/2007, 17h15
  5. Réponses: 3
    Dernier message: 06/09/2006, 09h06

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