Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#76 Le 24/02/2011, à 18:19

FRUiT

Re : Manipulation de fichier texte [Résolu]

Faudrait déjà que j'update pour kde4.5+ lol. Et puis je connais pas trop gnome.

Manque l'extension non ?

nblignes=$(egrep -vc "^$" "${ffichier}.txt")

Et attention j'ai rajouté l'option "-v" ce qui compte finalement toutes les lignes SAUF les vides (et pas besoin de wc finalement).

Dernière modification par FRUiT (Le 24/02/2011, à 18:35)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#77 Le 24/02/2011, à 18:36

ridfa

Re : Manipulation de fichier texte [Résolu]

OK wink
le script compte déjà les lignes

ligne=$(wc -l <<< "${a[@]}")

mais toujours zéro

edit : pour l'extension non, il compte depuis la variable puis injecte le résultat au travers d'une fenêtre zenity.
Le fichier final ne doit pas comporter les infos de comptage

Dernière modification par ridfa (Le 24/02/2011, à 18:38)

Hors ligne

#78 Le 24/02/2011, à 18:44

FRUiT

Re : Manipulation de fichier texte [Résolu]

Ah oui pardon j'ai mal lu.

Une petite remarque en attendant :

lignefichier=$(wc -l "${fichier}")

A remplacer par :

lignefichier=$(wc -l < "${fichier}")

Comme ça tu récupères que le nombre et pas tout le retour de wc (ça évite le ${lignefichier%% *} ).


Donc ça, ça devrait marcher non ?

nblignes=$(egrep -vc "^$" <<<"${ffichier}")

Dernière modification par FRUiT (Le 24/02/2011, à 21:13)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#79 Le 24/02/2011, à 18:53

ridfa

Re : Manipulation de fichier texte [Résolu]

cool Bien joué, ça marche !

Par contre, je ne vois pas de différence entre

lignefichier=$(wc -l "${fichier}")

et

lignefichier=$(wc -l < "${fichier}")

ça marche dans les deux cas wink

Hors ligne

#80 Le 24/02/2011, à 18:58

FRUiT

Re : Manipulation de fichier texte [Résolu]

Ben,

> wc -l /sh/putf
52 /sh/putf
> wc -l < /sh/putf
52

En gros, ta ligne suivante peut se simplifier en :

echo "le fichier comporte $lignefichier lignes" > "${ffichier}.txt"

De même que :

ligne=$(wc -l <<< "${a[@]}")

Retourne également uniquement le nombre donc tu peux ensuite écrire :

echo "$ligne lignes ont été modifiées" >> "${ffichier}.txt"

Dernière modification par FRUiT (Le 24/02/2011, à 19:04)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#81 Le 24/02/2011, à 19:22

ridfa

Re : Manipulation de fichier texte [Résolu]

Bien vu !

> wc -l /sh/putf
52 /sh/putf
> wc -l < /sh/putf
52

En plus je crois que l'on m'a déjà fait la remarque mais à un autre endroit du script tongue
Hizoka va gueuler car c'est lui qui me l'a signaler si je ne m'abuse hmm

Merci à toi
car vu le nombre d'infos que je dois digérer big_smile, je n'ai pas encore pris la peine de chercher le sens de [@]
cela m'a été signalé dans le cas d'une liste.

Sympa, j'en aurais appris bien plus avec ce script que toutes les lectures que j'ai eues qui se sont envolées comme de la fumée, on dirait  wink

Hors ligne

#82 Le 24/02/2011, à 19:28

FRUiT

Re : Manipulation de fichier texte [Résolu]

a est un tableau. a[@] désigne l'ensemble des éléments de ce tableau, au même titre que a[1] désigne l'élément numéro 2 du tableau.

Dernière modification par FRUiT (Le 24/02/2011, à 19:28)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#83 Le 24/02/2011, à 19:37

ridfa

Re : Manipulation de fichier texte [Résolu]

Merci FRUiT wink

J'ai appliqué tes conseils d'optimisation et c nickel cool

Dernière modification par ridfa (Le 24/02/2011, à 19:38)

Hors ligne

#84 Le 24/02/2011, à 20:14

Hizoka

Re : Manipulation de fichier texte [Résolu]

si ca t'a était utile, tant mieux smile


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#85 Le 24/02/2011, à 20:41

ridfa

Re : Manipulation de fichier texte [Résolu]

Dès que j'apprends un truc je trouve ça utile en plus je gagne un temps fou à traiter mes fichiers cool

Là ou je reste perplexe c'est toujours et encore la création de cette ligne vide supplémentaire en fin de fichier
Comme je le disais un peu plus haut, je ne comprends bien la piste que tu as évoquée concernant l'espace dans la variable $a hmm

Sinon tout est parfait à mon goût car ça fait bien longtemps que je voulais mettre en oeuvre un tel script pour en faire d'autres après, bien sûr wink

Hors ligne

#86 Le 25/02/2011, à 09:01

Totor

Re : Manipulation de fichier texte [Résolu]

Salut,

Il ne faut pas chercher bien loin pour comprendre d'où vient cette ligne supplémentaire:

ligne fautive a écrit :

a+="${REPLY/*http/http}"$'\n'

Remplace : printf "$a" > "${ffichier}.txt" par printf "${a%?}" > "${ffichier}.txt" et elle n'y paraitra plus.


-- Lucid Lynx --

Hors ligne

#87 Le 25/02/2011, à 09:12

ridfa

Re : Manipulation de fichier texte [Résolu]

Salut Totor

J'essaie ça de suite smile

edit : J'ai mofidié en conséquence mais la ligne est toujours là hmm
En plus la coloration du code change comme s'il manquait qqch

Dernière modification par ridfa (Le 25/02/2011, à 09:20)

Hors ligne

#88 Le 25/02/2011, à 09:55

Totor

Re : Manipulation de fichier texte [Résolu]

as-tu toujours les lignes suivantes dans ton script ?

echo "le fichier comporte ${lignefichier%% *} lignes" > "${ffichier}.txt"
echo "${ligne% *} lignes ont été modifiées" >> "${ffichier}.txt"
echo "${a}" >> "${ffichier}.txt"

Si oui :
- pourquoi réécrire ${a} dans le fichier ? (puisque c'est déjà fait après la boucle)
- il faut changer echo "${a}" >> "${ffichier}.txt" par printf  "${a%?}" >> "${ffichier}.txt" car le dernier caractère de ${a} est un retour à la ligne et la builtin echo (sans option -n) rajoute un retour à la ligne automatiquement (soit deux retours à la ligne)

Si tu ne réécris pas ${a} et que tu ne veux pas de la dernière ligne vide,  il faut modifier echo "${ligne% *} lignes ont été modifiées" >> "${ffichier}.txt" en printf "${ligne% *} lignes ont été modifiées" >> "${ffichier}.txt" (ou echo -n ....)

Dernière modification par Totor (Le 25/02/2011, à 10:49)


-- Lucid Lynx --

Hors ligne

#89 Le 25/02/2011, à 10:19

ridfa

Re : Manipulation de fichier texte [Résolu]

smile
Avant de tester, je réponds à ta question pourquoi réécrire dans le fichier.
En fait avant de produire le fichier final, une fenêtre zenity s'ouvre avec un récap des lignes créées ainsi que les infos concernant le comptage des lignes du fichier initial, du fichier final et aussi le comptage des lignes
mais ces 3 lignes de "comptage" ne doivent pas apparaître dans le fichier final
Voilà

Merci pour tes conseils, je teste tout de suite wink

edit : voilà en mixant un peu tout ce que tu m'as dit pour enfin supprimer cette mad ligne vide

echo "le fichier comporte ${lignefichier} lignes" > "${ffichier}.txt"
echo "${ligne% *} lignes ont été modifiées" >> "${ffichier}.txt"
printf "${a%?}" >> "${ffichier}.txt"

Et là it's very good big_smile
Du coup voilà le script au complet

#!/bin/bash
fichier=$(zenity --file-selection\
    --title "Fichier à traiter"\
    --filename "dossier_par_defaut_pour_choisir_fichier") || exit
ffichier=$(zenity --file-selection \
    --title "Nom du fichier final" \
    --filename "dossier_par_defaut_pour_enregistrer_fichier_final" \
    --save) || exit
a=
while read
do
    [[ $REPLY == *http://192.168.1.1* ]]\
       && [[ $a != *${REPLY#*http://192.168.1.1}* ]]\
       && a+="${REPLY/*http/http}"$'\n'
done <"$fichier"
printf "${a% *}" > "${ffichier}.txt"
lignefichier=$(wc -l <"${fichier[@]}")
ligne=$(wc -l <<< "${a[@]}")
echo "le fichier comporte ${lignefichier} lignes" > "${ffichier}.txt"
echo "${ligne% *} lignes ont été modifiées" >> "${ffichier}.txt"
printf "${a%?}" >> "${ffichier}.txt"
zenity --text-info \
--title "Résultat" \
--width "412" \
--filename "${ffichier}.txt"
sed -i '1,2d' "${ffichier}.txt"
exit 0

Merci Totor wink

Dernière modification par ridfa (Le 25/02/2011, à 11:06)

Hors ligne

#90 Le 08/03/2011, à 10:04

YannUbuntu

Re : Manipulation de fichier texte [Résolu]

Bonjour

J'ai besoin de votre aide pour un sujet similaire : http://forum.ubuntu-fr.org/viewtopic.ph … 8#p4029768

Merci d'avance smile

Dernière modification par YannUbuntu (Le 08/03/2011, à 10:06)


à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison

Hors ligne