Position de carcteres
dr971
Messages postés
27
Date d'inscription
Statut
Membre
Dernière intervention
-
dr971 Messages postés 27 Date d'inscription Statut Membre Dernière intervention -
dr971 Messages postés 27 Date d'inscription Statut Membre Dernière intervention -
Bonjour, je souhaite lire un fichier ligne par ligne et trouver la position du premier caractere de chaque ligne ( sa colonne ) en faisant une boucle pourriez vous m'aider svp. merci
A voir également:
- Position de carcteres
- Ma position - Guide
- Suivi position google - Guide
- Partage de position whatsapp - Guide
- Position gps - Guide
- Comment envoyer sa position par sms - Accueil - Téléphones
5 réponses
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
dr971
Messages postés
27
Date d'inscription
Statut
Membre
Dernière intervention
merci de l'interet que tu porte à mon probleme. Mais en fait ton prog ne me donne pas la position du premier caractere de la ligne ki n'est pas un espace, il me donne la longueur de la chaine si je ne me trompe pas. Moi je voudrais la position du premier caractere qui n'est pas un espace. As tu une idéee? merci
jipicy
Messages postés
40842
Date d'inscription
Statut
Modérateur
Dernière intervention
4 896
>
dr971
Messages postés
27
Date d'inscription
Statut
Membre
Dernière intervention
T'as essayé la version corrigée ci-dessous ?
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
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
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)?
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