Fonction "pluriel_de" qui renvoie le pluriel de la chaine de caractère passée en paramètre.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 218 fois - Téléchargée 31 fois

Contenu du snippet

Fonction "PLURIEL_DE" qui renvoie le pluriel de la chaine de caractère passée en paramètre.
Quoi dire de plus ?
Je l'utilise énormément...
J'ai créé l'unité PLURIEL pour publier cette fonction. Celle-ci est dans une unité fourre-tout avec d'autres fonction.

Source / Exemple :


//----------------------------------------------------------//
// Unité Pluriel.pas par Diégo DELPY - assemple@free.fr     //
//----------------------------------------------------------//
// La fonction Pluriel_de renvoie le pluriel du mot ou du   //
// groupe de mots passé en paramètre                        //
// Dans le cas d'un mot simple passé en paramètre, je pense //
// que la function est juste. Dans le cas contraire, envoyez//
// moi un mot à assemple@free.fr.                           //
// Dans le cas d'un groupe de mot je ne suis pas très sûr   //
// que la fonction soit juste. Faites-moi ici aussi des     //
// suggestions, ou reprennez ce source et améliorez le.     //
//----------------------------------------------------------//
unit Pluriel;

interface

Function Pluriel_de( S : ShortString ) : ShortString ;

implementation

Function Majuscule( S : String ) : String ; OverLoad ;
var I : Integer ;
Begin
  If S='' then
  Begin
    Result := '' ;
    EXIT ;
  End ;
  For I:= 1 to Length(S) do
  Begin
    Case S[I] Of
      'à','â','ä' : S[I] := 'A' ;
      'é','è','ê','ë' : S[I] := 'E' ;
      'î','ï' : S[I] := 'I' ;
      'ô','ö' : S[I] := 'O' ;
      'ù','û','ü' : S[I] := 'U' ;
    Else S[I] := UpCase(S[I]) ;
    End ;
  End ;
  Majuscule := S ;
End ;

Function Majuscule( S : ShortString ) : ShortString ;OverLoad ;
var I : Byte ;
Begin
  If S='' then
  Begin
    Result := '' ;
    EXIT ;
  End ;
  For I:= 1 to Length(S) do
  Begin
    Case S[I] Of
      'à','â','ä' : S[I] := 'A' ;
      'é','è','ê','ë' : S[I] := 'E' ;
      'î','ï' : S[I] := 'I' ;
      'ô','ö' : S[I] := 'O' ;
      'ù','û','ü' : S[I] := 'U' ;
    Else S[I] := UpCase(S[I]) ;
    End ;
  End ;
  Majuscule := S ;
End ;

Function Pluriel_de( S : ShortString ) : ShortString ;
var
    EnMajuscule : ShortString ;
    ToutEnMajuscule : Boolean ;
    S2 : ShortString ;
Begin
  If (Pos('(',S)>0) and (Pos(')',S)>Pos('(',S)+1) then
  Begin
    S2 := Copy(S,Pos('(',S)+1,Pos(')',S)-Pos('(',S)-1) ;
    Delete(S,Pos('(',S)+1,Length(S2) ) ;
    S := Pluriel_de(S) ;
    Insert(S2,S,Pos('()',S)+1) ;
  End ;
  If S='' then
  Begin
    Pluriel_de := '' ;
    EXIT ;
  End ;
  If Pos(' ',S)>0
  then Result := Pluriel_de(Copy(S,1,Pos(' ',S)-1))
  else If Pos('-',S)>0
  then Result := Pluriel_de(Copy(S,1,Pos('-',S)-1))
  else Begin
    Result := S ;
    EnMajuscule := Majuscule(S) ;
    ToutEnMajuscule := (EnMajuscule = Result) ;
    If Pos(Result[Ord(Result[0])],'zZxsXS')>0 then Exit
    else If (EnMajuscule='LANDAU')Or
            (EnMajuscule='SARRAU')Or
            (EnMajuscule='BLEU')Or
            (EnMajuscule='PNEU')Or
            (EnMajuscule='BAL')Or
            (EnMajuscule='CARNAVAL')Or
            (EnMajuscule='CHACAL')Or
            (EnMajuscule='FESTIVAL')Or
            (EnMajuscule='RECITAL')Or
            (EnMajuscule='REGAL')  then Result := Result + 's'
    Else If (EnMajuscule='BIJOU')Or
            (EnMajuscule='CAILLOU')Or
            (EnMajuscule='CHOU')Or
            (EnMajuscule='GENOU')Or
            (EnMajuscule='HIBOU')Or
            (EnMajuscule='JOUJOU')Or
            (EnMajuscule='POU') Or
            ((EnMajuscule[0]>#2)AND(Copy(EnMajuscule,Ord(EnMajuscule[0])-1,2)='AU')) Or
            ((EnMajuscule[0]>#2)AND(Copy(EnMajuscule,Ord(EnMajuscule[0])-1,2)='EU'))
                                    then Result := Result + 'x'
    Else If (EnMajuscule='BAIL')Or
            (EnMajuscule='CORAIL')Or
            (EnMajuscule='EMAIL')Or
            (EnMajuscule='SOUPIRAIL')Or
            (EnMajuscule='TRAVAIL')Or
            (EnMajuscule='VANTAIL')Or
            (EnMajuscule='VITRAIL')
                                    then Result := Copy(Result,1,Ord(Result[0])-3)+'aux'
    Else If ((EnMajuscule[0]>#2)AND(Copy(EnMajuscule,Ord(EnMajuscule[0])-1,2)='AL'))
                                    then Result := Copy(Result,1,Ord(Result[0])-1)+'ux'
    Else Result := Result + 's' ;
    If ToutEnMajuscule Then Result := Majuscule(Result) ;
  End ;
  If Pos(' ',S)>0 then If (Pos(' DE ',Majuscule(S))>0) or (Pos(' D''',Majuscule(S))>0)  then Result := Result+Copy(S,Pos(' ',S),30)
  else Result := Result+' '+Pluriel_de(Copy(S,Pos(' ',S)+1,30))
  else If Pos('-',S)>0 then Result := Result+Copy(S,Pos('-',S),30) ;
End ;

end.

Conclusion :


Le zip joint contient l'unité et une application de démonstration (toute simple)
Je développe des applications de Gestion (Facturation - Comptabilité - Paye)
librement téléchargeable sur mon site http://assemple.free.fr

A voir également

Ajouter un commentaire

Commentaires

Messages postés
65
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
16 décembre 2011

Les règles d'orthographe sont sous la forme :
Règle générale
Exceptions à la règle générale
Exceptions Particulières.
La règle générale c'est que les mots en terminés en AIL au singulier prennent un "S".
Une des exceptions c'est les mots de "Bail" à "Vitrail" qui s'accordent au pluriel en AUX (de "Baux" à "Vitraux").
L'exception particulière c'est le Mot "Ail" qui au pluriel ne donne ni "Ails" ni "Aux" mais "Aulx".
J'ai fait "Pluriel_De" d'après le Bled qui n'indique pas les exceptions particulières (ou ça m'a echapé). J'ai essayé d'y mettre toutes les règles possible (mais pour les mots composé il n'y a pas de règle ne tenant pas compte du sens) et à l'usage (le mien) j'ai affiné et corrigé.
Donc, pluriel gère genou (bien qu'il ne me serve jamais) et pas oeil ni ail CAR il ne servira jamais.
La réalité est plus complexe qu'on ne croit, et le paradoxe que tu croyais avoir relevé n'en était pas...
Nota : j'utilise un peu pluriel aussi pour des noms de champs. Par exemple : Graphique.Ordonnee := Facture.Total_HT
Graphiqhe.abcisse := Facture.Date
En automatique j'ai :
With Graphique do
Caption := 'Graphique des '+Pluriel_de(Ordonnee.NomDuChamp)+' '+Fichier.FdesXXX+' en fonction des '+Pluriel_de(Abcsisse.NomDuChamp)
Donc il peut arriver que j'utilise genou oeil ail avec pluriel_de ... Mais pas pour l'instant.
Messages postés
1721
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
30 août 2020
4
Donc, tu prends en compte "genou" mais pas "oeil", "chou" mais pas "ail"...

Ne le prend pas mal, Diégo DELPY-ASSEMPLE, mais j'ai un peu de mal à percevoir le pourquoi de cette discrimination, qu'elle soit positive ou négative !

A l'année prochaine ;-)

japee
Messages postés
65
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
16 décembre 2011

COMMENTAIRE de Diégo DELPY (ASSEMPLE), l'Auteur

Je découvre plus d'un an après, le commentaire de JAPEE !
Je repond donc, point par point ...
- En effet ça marche assez bien pour l'utiliser dans un cadre professionnel.
- En effet aussi, je ne gère pas les mots qui changent de forme avec le nombre. Je n'en ai pas eu besoin. J'utilise la fonction pluriel presqu'uniquement avec les noms d'entités susceptible d'être mise en fiche. Par exemple : client, facture, article, salarié... Ces Noms sont attribués lors de la conception d'une application, tandis qu'à l'execution, je donne un nom à un fichier comme ça : NF := 'Les '+Pluriel(NomFiche)+'.EXT'
Mais aussi, toujours à l'execution, telle fenêtre sera titrée par : FenetreDeChoix.Caption := 'Choisissez Les '+Pluriel(NomFiche)+' à effacer'.
Ces portions de code, citées en exemples, étant communes à tous les fichiers (client, facture, etc...)
Il n'y aura jamais de fichier yeux ou aulx. Mais certains utilisateurs utiliseront probablement cette fonction différement.
Dans ce cas, comme je publie je code source, il leur suffira d'ajouter des lignes de code gérant les cas particuliers (noms changeant de forme ET Noms Composés)
Merci ET SALUT à TOUS
Messages postés
1721
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
30 août 2020
4
Félicitations, tu as osé t'attaquer au problème. Pourtant c'est loin d'être simple.
Au premier abord, ça fonctionne plutôt pas mal du tout.
Néanmoins, tu n'as pas abordé le cas particulier des noms changeant complètement de forme au pluriel :
- un oeil, des yeux;
- un ail, des aulx...
Quand aux noms composés, la règle basique que tu appliques n'est pas toujours valable, hélas, par exemple :
- un sourd-muet, des sourds-muets...
Sans compter, dans la même rubrique, les mots d'origine étrangère :
- un week-end, des week-ends... etc...
Dur, dur, notre langue (mais logique souvent ;).
Bravo pour avoir dégrossi le problème, et (en attendant la suite ?) bon courage (Delphi dans une main, le "Bescherelle" dans l'autre) !

PS: le zip auquel tu fais allusion n'est pas disponible, un oubli ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.