Pos de la ligne la plus longue
Fermé
kiki
-
5 juil. 2011 à 00:28
mamiemando Messages postés 33432 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 décembre 2024 - 5 juil. 2011 à 00:57
mamiemando Messages postés 33432 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 décembre 2024 - 5 juil. 2011 à 00:57
A voir également:
- Pos de la ligne la plus longue
- Aller à la ligne excel - Guide
- Partage de photos en ligne - Guide
- Site de vente en ligne particulier - Guide
- Apparaitre hors ligne instagram - Guide
- Gps hors ligne - Guide
1 réponse
mamiemando
Messages postés
33432
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
16 décembre 2024
7 809
5 juil. 2011 à 00:57
5 juil. 2011 à 00:57
Personnellement j'utiliserais plutôt la built-in awk length() appliquée à $0, un bloc BEGIN pour initialiser les variables (ligne et longueur).
Je pense aussi que tu dois revoir la syntaxe awk et la manière dont architecturer ton code.
1) BEGIN : initialiser les variables : ici longueur et ligne, qui mémorisent la ligne qui t'intéresse et sa longueur.
2) Les blocs de traitement. Ici c'est pour toutes les lignes donc il y a juste un bloc sans expression régulière.
3) END : afficher le résultat.
Ainsi à ce stade on voit déjà que le code démarre comme ceci :
Maintenant reste à réfléchir sur le traitement en lui-même. Concrètement à chaque ligne que tu lis tu es susceptible de corriger la ligne et la longueur. La longueur tu l'as vu, consiste à utiliser length(). La chaîne qui nous intéresse est la ligne complète, donc c'est length($0).
Ensuite, il faut également corriger la ligne courante. On sait que celle-ci est mémorisée dans la variable NR, qui est corrigée automatiquement par awk à chaque fois qu'il lit une nouvelle ligne.
Maintenant, on ne veut faire cette mémorisation que si la ligne que l'on lit (length($0)) est plus longue que celle mémorisée jusqu'ici (longueur). On fait un tour dans l'aide de awk :
... et on s'aperçoit que le bloc if(...) { ... } va permettre de s'en sortir.
Je te laisse conclure pour voir si tu arrives à finaliser ton exercice afin que l'exercice t'apporte quelque chose... ça me paraît plus intéressant que de te donner la solution !
Bonne chance
Je pense aussi que tu dois revoir la syntaxe awk et la manière dont architecturer ton code.
1) BEGIN : initialiser les variables : ici longueur et ligne, qui mémorisent la ligne qui t'intéresse et sa longueur.
2) Les blocs de traitement. Ici c'est pour toutes les lignes donc il y a juste un bloc sans expression régulière.
3) END : afficher le résultat.
Ainsi à ce stade on voit déjà que le code démarre comme ceci :
BEGIN { // On met des valeurs négatives pour que ce soit corriger // dès la lecture de la première ligne longueur = -1; ligne = -1; } { // Traitement } END { print longueur, ligne; }
Maintenant reste à réfléchir sur le traitement en lui-même. Concrètement à chaque ligne que tu lis tu es susceptible de corriger la ligne et la longueur. La longueur tu l'as vu, consiste à utiliser length(). La chaîne qui nous intéresse est la ligne complète, donc c'est length($0).
Ensuite, il faut également corriger la ligne courante. On sait que celle-ci est mémorisée dans la variable NR, qui est corrigée automatiquement par awk à chaque fois qu'il lit une nouvelle ligne.
Maintenant, on ne veut faire cette mémorisation que si la ligne que l'on lit (length($0)) est plus longue que celle mémorisée jusqu'ici (longueur). On fait un tour dans l'aide de awk :
man awk
... et on s'aperçoit que le bloc if(...) { ... } va permettre de s'en sortir.
Je te laisse conclure pour voir si tu arrives à finaliser ton exercice afin que l'exercice t'apporte quelque chose... ça me paraît plus intéressant que de te donner la solution !
Bonne chance