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

Shell et commandes GNU Discussion :

Manipulation de chaine


Sujet :

Shell et commandes GNU

Vue hybride

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 209
    Par défaut Manipulation de chaine
    Bonjour,
    Je débute en bash, et j'aimerais remplacer des occurrences dans une chaine, et les mettre au format voulu... Mais voilà, je n'y arrive pas.

    En bref, j'ai une chaine de caractère qui ressemble à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LOT 123 A
    €      12.3456
    et j'aimerais obtenir 2 variables formatées ainsi :
    J'ai essayé plusieurs choses, mais à vrai dire rien de structuré ou présentable

    Par avance merci

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    j'aimerais obtenir 2 variables formatées ainsi
    pourquoi ?
    quelle est la "logique" d'une telle transformation ?
    d'où vient cette chaîne ? comment est-elle "fournie" au script ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 209
    Par défaut
    Bonjour N_Bah,

    Voici mes réponses à tes questions :
    pourquoi ?
    1/ Pour qu'au moins la 1ere variable soit exploitable par la suite dans le script (vérification d'existance de fichier à partir de celle ci)
    2/ Pour savoir le faire ensuite et ne plus reposer la question

    quelle est la "logique" d'une telle transformation ?
    Elle m'est nécessaire pour rechercher un fichier à partir de celle ci

    d'où vient cette chaîne ? comment est-elle "fournie" au script ?
    Elle est issue d'une reconnaissance OCR. Je peux éventuellement supprimer la chaine "LOT" du l'exemple fournit, mais il me faut un resultat sans espace et sans point...

    Bien à toi

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    tu n'as pas compris mes questions, je ne cherche pas les justifications pour effectuer cette transformation, mais les critères de celle-ci : c'est-à-dire quels éléments doivent disparaître, pourquoi (leur emplacement, leur valeur...?)

    donc, "LOT" ne doit pas apparaître dans le résultat, mais, apparemment, "€" non plus !? pourquoi ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 209
    Par défaut
    Ok,

    L'exemple que je fourni dans le 1er post est emblématique de la transformation.

    J'obtiens toujours une chaine composée comme suit :
    1/ Le mot LOT suivi d'une serie de 1 à 3 chiffres et d'éventuellement d'une lettre à la suite.
    Très souvent un retour à la ligne
    2/ Un symbole de monnaie (€, $) suivi d'une série d'espace et d'une série de chiffre dont les milliers sont parfois séparé par un point (.)

    Cette ensemble de caractères doit être transformé en 2 sous ensembles afin d'être exploitable :
    1/ Une serie de 1 à 3 chiffres sous forme de nombre, ayant eventuellement une lettre accolé
    2/ Une serie de chiffre sous forme de nombre uniquement pour la seconde

    J'espere avoir été plus clair ?

    PS : je le faisais précedement en php, ce qui ne convient plus, et cela ressemblait à cela :
    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
    if ( $r *1 >= 0 ) return preg_replace('/\./', '', $r);
    $r = preg_split('/[\n\r]/', $r);
    $res = array();
      foreach ($r as $key => $value) {
        if ( trim($value) !== '' ){
          array_push($res, $value);
        }
      }
      foreach ($res as $key => $value) {
        $lot = preg_match("/(#|lot|Lot|LOT|LQT)(\s|\s+)?([0-9]{1,3}[a-zA-Z]{0,1})/", $value, $l);
        if ($lot == 1) break;
      }
      $eu = -1;
      foreach ($res as $key => $value) {
        $euro = preg_match("/(€|EUR|EURO)(\s|\s+)?([0-9\.]+)/", $value, $e);
        if ($euro == 1) {
          $eu = preg_replace('/\./', '', $e[count($e)-1]);
          if  ( trim($eu)== "" || is_bool($eu) ) $eu = -1;
          break;
        }
      }
      ...
    }
    Merci

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    la sortie de la commande OCR ne comporte qu'une ou deux lignes ?
    si il n'y a qu'une ligne, le "prix" est-il toujours présent ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Manipulation de chaines
    Par tchoukapi dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 04/09/2006, 17h41
  2. [D7] Manipulations de chaines
    Par jer64 dans le forum Delphi
    Réponses: 2
    Dernier message: 21/07/2006, 22h16
  3. [PLSQL] Manipulation des chaines.
    Par zero d dans le forum Oracle
    Réponses: 5
    Dernier message: 14/12/2005, 18h27
  4. Réponses: 4
    Dernier message: 20/08/2004, 10h59
  5. Fonctions de manipulation des chaines et des dates
    Par Fares BELHAOUAS dans le forum Débuter
    Réponses: 3
    Dernier message: 09/11/2002, 22h43

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