Position de carcteres
Fermé
dr971
Messages postés
27
Date d'inscription
mardi 6 mars 2007
Statut
Membre
Dernière intervention
26 juillet 2007
-
6 mars 2007 à 20:03
dr971 Messages postés 27 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 26 juillet 2007 - 8 mars 2007 à 18:01
dr971 Messages postés 27 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 26 juillet 2007 - 8 mars 2007 à 18:01
A voir également:
- Position de carcteres
- Partage de position - Guide
- Position interrupteur i ou o ✓ - Forum Loisirs / Divertissements
- Position gps - Guide
- Position image html ✓ - Forum HTML
- Partager position whatsapp - Guide
5 réponses
pmx
Messages postés
138
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
14 mars 2008
28
6 mars 2007 à 20:55
6 mars 2007 à 20:55
Je pense que le caractère "espace" ne t'interresse pas ?
Donc si les lignes sont décalées par des espaces ou tabulations :
cat fichier | expand | while read i
do
# longueur de la ligne complète
Lfull=$(echo "$i" | wc -c)
# longueur de la ligne sans les espaces en début de ligne
Lshort=$(echo "$i" | sed "s/^ *//g")
echo $(($Lfull - $Lshort))
done
ça devrait marcher ça non ?
Je ne l'ai pas testé.
A+
pmx
Donc si les lignes sont décalées par des espaces ou tabulations :
cat fichier | expand | while read i
do
# longueur de la ligne complète
Lfull=$(echo "$i" | wc -c)
# longueur de la ligne sans les espaces en début de ligne
Lshort=$(echo "$i" | sed "s/^ *//g")
echo $(($Lfull - $Lshort))
done
ça devrait marcher ça non ?
Je ne l'ai pas testé.
A+
pmx
jipicy
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 901
6 mars 2007 à 22:42
6 mars 2007 à 22:42
Salut,
pmx => Pour que ton script fonctionne, il faudrait d'abord initialiser la variable "IFS" à rien(IFS=), puis compléter ta ligne :
" Lshort=$(echo "$i" | sed "s/^ *//g")"
avec :
" Lshort=$(echo "$i" | sed "s/^ *//g") | wc -c".... ce qui donnerait :
Sinon dr971 => essaie ça :
pmx => Pour que ton script fonctionne, il faudrait d'abord initialiser la variable "IFS" à rien(IFS=), puis compléter ta ligne :
" Lshort=$(echo "$i" | sed "s/^ *//g")"
avec :
" Lshort=$(echo "$i" | sed "s/^ *//g") | wc -c".... ce qui donnerait :
#/bin/bash OIFS=$IFS; IFS= cat plop | expand | while read i do # longueur de la ligne complète Lfull=$(echo "$i" | wc -c) # longueur de la ligne sans les espaces en début de ligne Lshort=$(echo "$i" | sed "s/^ *//g" | wc -c) echo $(($Lfull - $Lshort)) done IFS=$OIFS;-))
Sinon dr971 => essaie ça :
#!/bin/bash IFS=$'\n' for line in $(cat plop) do pos=$(echo -e "$line" | expand | sed 's/\(^[ ]*\).*/\1/'| wc -c) echo -e "Position = $pos" done
pmx
Messages postés
138
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
14 mars 2008
28
7 mars 2007 à 00:22
7 mars 2007 à 00:22
Ah ben oui, pourquoi faire simple ...
jipicy a raison : il suffit de compter les espaces en début de ligne bien sûr.
sed est vraiment très bien !
Pourquoi les 2 espaces entre crochets dans sed ??
jipicy a raison : il suffit de compter les espaces en début de ligne bien sûr.
sed est vraiment très bien !
Pourquoi les 2 espaces entre crochets dans sed ??
dr971
Messages postés
27
Date d'inscription
mardi 6 mars 2007
Statut
Membre
Dernière intervention
26 juillet 2007
7 mars 2007 à 18:14
7 mars 2007 à 18:14
j'essaie d'utiliser le programme :
#!/bin/bash
IFS=$'\n'
for line in $(cat plop)
do
pos=$(echo -e "$line" | expand | sed 's/\(^[ ]*\).*/\1/'| wc -c)
echo -e "Position = $pos"
done
mais rien ne se passe pourrais tu m'indiquer la marche à suivre pour ouvrir un fichier (ex: fichier_test) et detecter la position de chaque premier caractere de chaque ligne stp . merci d'avance
#!/bin/bash
IFS=$'\n'
for line in $(cat plop)
do
pos=$(echo -e "$line" | expand | sed 's/\(^[ ]*\).*/\1/'| wc -c)
echo -e "Position = $pos"
done
mais rien ne se passe pourrais tu m'indiquer la marche à suivre pour ouvrir un fichier (ex: fichier_test) et detecter la position de chaque premier caractere de chaque ligne stp . merci d'avance
jipicy
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 901
>
dr971
Messages postés
27
Date d'inscription
mardi 6 mars 2007
Statut
Membre
Dernière intervention
26 juillet 2007
7 mars 2007 à 18:18
7 mars 2007 à 18:18
Salut,
Peut être remplacer la ligne :
for line in $(cat plop)
par :
for line in $(cat fichier_test)
Non ?
Peut être remplacer la ligne :
for line in $(cat plop)
par :
for line in $(cat fichier_test)
Non ?
pmx
Messages postés
138
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
14 mars 2008
28
>
jipicy
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
7 mars 2007 à 18:30
7 mars 2007 à 18:30
lol
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
7 mars 2007 à 07:16
7 mars 2007 à 07:16
Salut,
la position de 1er caractère je suppose qu'est en fonctions d'un caractère de la famille espace (espace, tabulation).
on compte la tabulation en tant qu'un caractère ou on doit la convertir en espace?
et si on doit la convertir en espace, alors combien d'espaces pour une tabulation (si je ne me trompe pas c'est 8 par défaut)?
la position de 1er caractère je suppose qu'est en fonctions d'un caractère de la famille espace (espace, tabulation).
on compte la tabulation en tant qu'un caractère ou on doit la convertir en espace?
et si on doit la convertir en espace, alors combien d'espaces pour une tabulation (si je ne me trompe pas c'est 8 par défaut)?
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
7 mars 2007 à 09:10
7 mars 2007 à 09:10
Et voilà ce que ça donne
pas d'espace
2 espaces
une tabulation
pas d'espace
echo "a sdjfkl" | perl -ne '/^(\s+)(?=\S)/;print length($1),"\n"' 0
2 espaces
echo " a sdjfkl" | perl -ne '/^(\s+)(?=\S)/;print length($1),"\n"' 2
une tabulation
echo -e "\ta sdjfkl" | perl -ne '/^(\s+)(?=\S)/;print length($1),"\n"' 1
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dr971
Messages postés
27
Date d'inscription
mardi 6 mars 2007
Statut
Membre
Dernière intervention
26 juillet 2007
8 mars 2007 à 18:01
8 mars 2007 à 18:01
merci à tous pour votre aide. Mon programme fonctionne parfaitement
6 mars 2007 à 22:42
6 mars 2007 à 23:04