コード例 #1
0
        /// <summary>
        /// Retourne l'index de la référence donnée<br/>
        /// Plusieurs erreurs potentielles peuvent être retournées :<br/>
        /// - la reference est vide<br/>
        /// - un ou plusieurs caractères n'existent pas dans la séquence<br/>
        /// - la longueur n'est pas adequate<br/>
        /// - l'index retourné est en dehort des limites du format de numérotation<br/>
        /// Avant validation :<br/>
        /// - la sequence est nulle<br/>
        /// - la séquence est trop courte<br/>
        /// </summary>
        /// <param name="strReference">Référence à indexer</param>
        /// <returns></returns>
        public CResultAErreur GetIndex(string strReference)
        {
            CResultAErreur result = CResultAErreur.True;

            if (Romain)
            {
                try
                {
                    int nVal = CNombreRomain.IntFromRomain(strReference);
                    nVal        = Math.Max(nVal, 0);
                    result.Data = nVal;
                    return(result);
                }
                catch (Exception e)
                {
                    result.EmpileErreur(new CErreurException(e));
                    return(result);
                }
            }

            //Verification de la reference donnée
            result = VerifierNormalisation(strReference);

            if (result.Result)
            {
                int    nIndex        = 0;
                int    nCpt          = strReference.Length - 1;
                char[] lstChars      = strReference.ToUpper().ToCharArray();
                string strSequenceUp = Sequence.ToUpper();

                foreach (char c in lstChars)
                {
                    int nPosDansSec = strSequenceUp.IndexOf(c);

                    if (nPosDansSec == -1)
                    {
                        result.EmpileErreur(I.T("The char '@1' is not in the sequence", c.ToString()));
                        return(result);
                    }

                    double nTmp = (double)nIndex;
                    nTmp += (double)nPosDansSec * Math.Pow((double)Base, (double)nCpt);

                    if (nTmp > (double)int.MaxValue)
                    {
                        result.EmpileErreur(I.T("Reference out of range|128"), c.ToString());
                        break;
                    }
                    else
                    {
                        nIndex = (int)nTmp;
                    }

                    nCpt--;
                }

                result.Data = nIndex;
            }
            return(result);
        }
コード例 #2
0
        /// <summary>
        /// Permet la vérification d'une référence sur sa normalisation
        /// </summary>
        /// <param name="strReferenceAVerifier">Reference à vérifier</param>
        /// <returns></returns>
        public CResultAErreur VerifierNormalisation(string strReferenceAVerifier)
        {
            CResultAErreur result = CResultAErreur.True;

            if (Romain)
            {
                try
                {
                    CNombreRomain.IntFromRomain(strReferenceAVerifier);
                    return(result);
                }
                catch (Exception e)
                {
                    result.EmpileErreur(new CErreurException(e));
                }
            }


            strReferenceAVerifier = strReferenceAVerifier.Trim().ToUpper();

            //Pas de séquence déterminée
            if (this.Sequence.Length == 0)
            {
                result.EmpileErreur(I.T("The sequence is empty|133"));
            }

            //Sequence trop courte
            else if (this.Sequence.Length == 1)
            {
                result.EmpileErreur(I.T("The sequence must have a minimum of 2 characters|169"));
            }

            //Valeur Nulle
            else if (strReferenceAVerifier == "" || strReferenceAVerifier == string.Empty)
            {
                result.EmpileErreur(I.T("Reference of @1 cannot be null|134", this.Libelle), this.LongueurReference.ToString());
            }

            //Trop longue
            else if ((LongueurReference != 0) && strReferenceAVerifier.Length > LongueurReference)
            {
                result.EmpileErreur(I.T("Reference must have @1 character length|130"), this.LongueurReference.ToString());
            }

            else
            {
                //Reformatage si nécessaire (Longueur spécifiée)
                if (LongueurReference != 0)
                {
                    int nDiff = LongueurReference - strReferenceAVerifier.Length;
                    for (int i = 0; i != nDiff; i++)
                    {
                        strReferenceAVerifier = Sequence.Substring(0, 1) + strReferenceAVerifier;
                    }
                }

                //Caractère inexistant dans la séquence
                string strSequenceUp = Sequence.ToUpper();
                foreach (char c in strReferenceAVerifier.ToCharArray())
                {
                    if (strSequenceUp.IndexOf(c) == -1)
                    {
                        result.EmpileErreur(I.T("Character @1 does not exist in the sequence (@2)|129"), c.ToString(), Sequence);
                    }
                }

                result.Data = strReferenceAVerifier;
            }

            return(result);
        }