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 :

Lire le caractère à une position d'une chaine


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Lire le caractère à une position d'une chaine
    Bonjour,

    Dans le cadre d'un projet j'écris un script pour faire un mini jeu RPG. J'ai donc fais un script me permettant de déplacer une croix à l'aide de tput cup, j'ai également dessiner une map en #.
    Mon problème est maintenant de bloquer les déplacements de la croix lorsqu'elle rencontre un # ..
    Je pensais au départ lire les infos affichées sur la console à la position de destination de ma croix et d'empêcher le déplacement si il y'a un # mais ça semble presque impossible selon les retour que j'ai eu ?
    J'ai donc réfléchi à une autre idée, je pensais replacer ma map dans un fichier text et comparer la position de ma croix dans la console avec la position des caractères dans fichier texte, ce qui me semblait plus réalisable mais j'ai beau chercher je ne trouve pas comment faire pour récupérer l'info dans le fichier texte.

    En exemple ce que je veux faire est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if [ grep caractère x ligne y <> '#' ]; then
    tput cup x y;
    echo 'x';
    fi
    C'est le grep qui me pose problème, je n'ai pas pu trouver s'il y'avait moyen de faire ça, avec grep ou une autre commande ..
    Je ne sais pas si le problème est clair, sinon je peux également joindre mon script.

    Merci d'avance pour vôtre aide.

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo 'aaaaba' | grep -e '^.\{4\}b.*$'
    aaaaba
    echo $?
    0
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 277
    Points : 12 722
    Points
    12 722
    Par défaut
    Bonjour,

    Perso, je récupérerais le caractère dans le fichier avec 'dd' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dd if=nom_du_fichier ibs=1 skip=$(((longueur_ligne*y)+x)) count=1
    Cordialement.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos réponses, on se rapproche !

    Citation Envoyé par ggnore Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo 'aaaaba' | grep -e '^.\{4\}b.*$'
    aaaaba
    echo $?
    0
    J'ai 2 problème avec cette méthode, cela retourne toute les occurences ou le caractère est trouvé à la position 4 et +, alors qu'il faudrait que cela ne soit que la position 4 et que si le caractère est à la position 5 cela ne retourne pas la chaine.
    Si il y'a 2 lignes avec le même caractère les 2 seront retournées et on ne peut pas faire de distinctions, alors que je voudrais retourner une ligne spécifique.


    Citation Envoyé par disedorgue Voir le message
    Bonjour,

    Perso, je récupérerais le caractère dans le fichier avec 'dd' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dd if=nom_du_fichier ibs=1 skip=$(((longueur_ligne*y)+x)) count=1
    Ca m'a l'air pas mal j'ai pas testé en application dans mon programme, y'a une astuce pour output dans une variable (j'ai essayé 'of=variable' mais cela n'a pas marché) ou est-on obligés de of dans un fichier puis de lire le fichier ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    Bonjour,

    soit une variable :pour un shell strictement POSIX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ expr substr "$var" 22 1
    #
    en bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "${var:21:1}"
    #
    pourquoi 22 et 21 pour le même caractère à la même position ?
    parce que expr commence son indexation des caractères d'une chaîne à 1, et bash à zéro.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 277
    Points : 12 722
    Points
    12 722
    Par défaut
    Citation Envoyé par Alzahel Voir le message
    Ca m'a l'air pas mal j'ai pas testé en application dans mon programme, y'a une astuce pour output dans une variable (j'ai essayé 'of=variable' mais cela n'a pas marché) ou est-on obligés de of dans un fichier puis de lire le fichier ?
    Méthode habituelle d'assignation de donnée dans une variable...:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var=$(dd if=nom_du_fichier ibs=1 skip=$(((longueur_ligne*y)+x)) count=1 2>/dev/null)
    Ici, je redirige la sortie d'erreur vers /dev/null pour que le rapport de dd n'apparaisse pas.
    Bon, après, faudra certainement que tu ajustes le calcul, selon que les coordonnées commencent à 0 ou 1 et si dans ton fichier de map, tu as rajouté des retours à la ligne, mais je suppose que tu avais déjà conscience de ce point.

    Après, la solution de N_BaH, sera surement plus rapide si tu peux faire tenir ta map directement dans une variable
    Cordialement.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour à tous,

    J'ai finalement réussi à faire ce que je voulais grâce à la méthode de N_BaH en ajoutant ma map dans un tableau pour retrouver la ligne.
    Merci à tous ceux qui ont apportés leur aide !

    Bonne soirée à vous.

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

Discussions similaires

  1. forcer une application dans une position et une résolution
    Par EricTA dans le forum Visual Studio
    Réponses: 0
    Dernier message: 17/10/2014, 16h15
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. Comment passer d'une position 2D à une position 3D?
    Par DestinyWar45 dans le forum OpenGL
    Réponses: 8
    Dernier message: 22/11/2006, 21h24

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