Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1472 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Transformation d'une chaine de caractères en entier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Transformation d'une chaine de caractères en entier

n°1468680
marc90
Posté le 01-11-2006 à 14:22:53  profilanswer
 

La commande wc -l renvoit une chaine de caractère apparement. Comment transformer cette dernière en un entier?  

mood
Publicité
Posté le 01-11-2006 à 14:22:53  profilanswer
 

n°1468727
matafan
Posté le 01-11-2006 à 16:28:03  profilanswer
 

En shell, chaine de caractere, entier, c'est tout pareil. L'important c'est le contexte dans lequel tu les utilises (par exemple, == interprete le truc comme une chaine, -eq comme un nombre).

n°1468865
marc90
Posté le 01-11-2006 à 21:40:53  profilanswer
 

Daccord mais je n'arrive pas à utiliser le résultat obtenu dans une opération.
$nb=`wc -l`
while(($num<$nb))
Si je remplace $nb par un chiffre la boucle marche.

n°1468963
matafan
Posté le 02-11-2006 à 03:23:49  profilanswer
 

C'est probablement que nb ne represente pas un chiffre...

n°1469249
marc90
Posté le 02-11-2006 à 13:53:31  profilanswer
 

En fait quand on fait wc -l nomFichier, le résultat est le nombre de ligne suivit de nomFichier.
Si on fait more nomFichier|wc -l, cela retourne le nombre de ligne.

Message cité 1 fois
Message édité par marc90 le 02-11-2006 à 13:55:45
n°1469263
Sve@r
Posté le 02-11-2006 à 14:17:07  profilanswer
 

matafan a écrit :

En shell, chaine de caractere, entier, c'est tout pareil. L'important c'est le contexte dans lequel tu les utilises (par exemple, == interprete le truc comme une chaine, -eq comme un nombre).


Les syntaxes "=" (et non "==" qui n'existe pas) et "-eq" sont des options de la commande "test". C'est cette dernière qui interprète le truc et non le shell lui-même.
Mais en effet, la remarque est intéressante. Exemple

var="01"
test $var -eq 1 && echo "test 1 réussi"       # Ca marche
test "$var" = "1" && echo "test 2 réussi"      # Ca ne marche pas


 

marc90 a écrit :

$nb=`wc -l`
Si je remplace $nb par un chiffre la boucle marche.


La syntaxe exacte serait "nb=`wc -l`" et non "$nb=`wc -l`" (erreur de frappe ici ou dans ton script ???)
 

marc90 a écrit :

Si on fait more nomFichier|wc -l, cela retourne le nombre de ligne.


cat nomFichier |wc -l [:aloy]
Pas besoin de demander une commande paginée alors qu'on n'utilise pas l'effet de pagination...
 
On peut aussi s'en sortir en faisant

Citation :

nb=`wc -l nomFichier |cut -f1`

pour supprimer le nom. Cela est un poil plus rapide car dans le "cat |wc", on traite 2 fois le contenu du fichier alors que dans cette 2° solution, on ne le traite qu'une fois...


Message édité par Sve@r le 02-11-2006 à 14:25:08

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1469374
marc90
Posté le 02-11-2006 à 16:16:20  profilanswer
 

Ha oui exact, merci pour le truc.

n°1469523
matafan
Posté le 02-11-2006 à 19:07:09  profilanswer
 

== est reconnu par la plupart des shells, mais tu as raison la syntaxe historique est =. Par contre dans tous les shells, test (dont [ ... ] est une sorte d'alias) est un built-in. Les = et autres -eq sont donc interpretes par le shell, pas par une command externe.

n°1470336
Sve@r
Posté le 03-11-2006 à 18:36:34  profilanswer
 

matafan a écrit :

test (dont [ ... ] est une sorte d'alias) est un built-in. Les = et autres -eq sont donc interpretes par le shell, pas par une command externe.


S'il est exact que quand on tape "which test" on obtient "shell built-in", il n'empêche qu'on trouve aussi la commande /bin/test (ou /usr/bin/test suivant les cas) d'où ma remarque initiale. Après tout, tout le monde ne bosse pas forcément en bash mais tout le monde a le droit d'utiliser la commande "test"...
D'ailleurs une différence existe sur les vieux systèmes entre "built-in test" et "/bin/test". Je ne me souviens plus exactement mais je crois me souvenir que la différence se situait au niveau de l'option "-L". L'une des deux ne pouvait pas détecter les lien symboliques...
 
Autre remarque dans le même style: il y a une grosse différence entre le built-in "pwd" et la commande "/bin/pwd". En effet, quand on se place dans un lien symbolique, l'une des deux donne le chemin tapé (le nom du lien) et l'autre donne le répertoire réel...


Message édité par Sve@r le 03-11-2006 à 18:36:55

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Transformation d'une chaine de caractères en entier

 

Sujets relatifs
probleme avec les chaines de caracteresbon encodage des caractères
probleme d'affichage de caracteresRemplacer une chaine de caractère par une autre dans du texte
afficher à l’écran, sous la forme d’1 série d’images, un nbr entier>0[Résolu]Problème de caractères depuis migration de siteweb
Ne pas recharger une page en entier[HTML] Caracteres chelous en provenance de certains ordinateurs
conversion chaine vers nombre 
Plus de sujets relatifs à : Transformation d'une chaine de caractères en entier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR