Pos de la ligne la plus longue 3

Fermé
kiki -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
j'ais pus corriger mes erreur et le prog devient sous cette forme
#!/usr/bin/awk
BEGIN {
long=-1
lign=0
}
{
while(lign<NR){
lign =lign+1
FNR =lign
l1=length($0)
FNR =lign+1
l2=length($0)
if(l1 > l2){
long = l1
lign=lign}
else{
long=l2
lign=FNR
} }
}
END {
print long,lign;
}
OR voici mon fichier
kiki
iki
jujuh
ET en executant le programme sur ce fichier il s'affiche
5 2
pourqoi
merci

1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Peux-tu poursuivre dans le fil de discussion initial ?
    https://forums.commentcamarche.net/forum/affich-22548958-pos-de-la-ligne-la-plus-longue#p22549097

    (clique sur le bouton "j'ai une réponse" pour poursuivre).

    Mais d'ores et déjà tu t'es à mon avis bien compliqué la vie.

    Tu n'as pas de boucle while à écrire. Le bloc :

    {
      ...
    }


    ... est exécuté à chaque lecture de ligne. Cela signifie que si ton fichier à 100 lignes, tu passeras 100 fois dans ce bloc. Il faut simplement que tu codes le comportement à chaque fois qu'une ligne est lue...

    Ainsi le pseudo code serait plutôt :

    {
      // Si la ligne que je lis est plus longue que celle que j'ai mémoriser
      // -> enregistrer le nouveau numéro de ligne
      // -> corriger la longueur de la ligne la plus longue
    }


    Du coup... tu as juste trois lignes à écrire !

    Autre conseille, attention à l'indentation :
    - passe à la ligne derrière une { et derrière une }
    - quand tu ouvres une accolade, augmente ta "marge" d'une tabulation
    - quand tu fermes une accolade, diminue ta "marge" d'une tabulation

    Ceci rendra ton code bien plus lisible. Je t'invite aussi à utiliser les balises de code (voir bouton <> au dessus de la boîte dans laquelle tu saisis le texte de ton message).

    Ainsi ton code ressemblera à ceci :

    BEGIN {
      ligne = -1;
      longueur = -1;
    }
    
    {
      if(...){
        ...
      }
    }
    
    END{
      print ligne, longueur;
    }


    Bonne chance
    0