Comment puis-je convertir des chaînes arbitraires à des noms de CLS conforme à la norme?

StackOverflow https://stackoverflow.com/questions/3010602

  •  26-09-2019
  •  | 
  •  

Question

Quelqu'un sait-il d'un algorithme (ou bibliothèque externe) que je pourrais appeler pour convertir une chaîne arbitraire (à savoir en dehors de mon contrôle) être conforme CLS?

Je suis la génération d'une RDLC dynamique (définition de rapport client) pour un contrôle Report Viewer ASP.Net et certains des noms de champs doivent être basées sur les chaînes saisies par l'utilisateur.

Malheureusement, je peu de contrôle sur l'entrée des noms de champs par le client (par une 3ème partie CMS). Mais je suis tout à fait flexible autour des substitutions nécessaires pour créer la chaîne conforme.

J'ai un algorithme de hack réactif pour l'instant le long des lignes de:

public static string FormatForDynamicRdlc(this string s)
{
    //We need to change this string to be CLS compliant.
    return s.Replace(Environment.NewLine, string.Empty)
        .Replace("\t", string.Empty)
        .Replace(",", string.Empty)
        .Replace("-", "_")
        .Replace(" ", "_");
}

Mais j'aimerais quelque chose de plus complet. Toutes les idées?

NOTE: Si elle est d'une aide, est basée sur la méthode BuildRDLC l'algorithme que je utilise pour créer la dynamique RDLC trouvé ici: http://csharpshooter.blogspot.com/2007/08/revised-dynamic-rdlc-generation.html

Était-ce utile?

La solution

Voici l'algorithme que j'utilise pour créer C / C ++ identificateurs de chaînes arbitraires (traduit en C #):

    static void Main(string[] args)
    {
        string input = "9\ttotally no @ # way!!!!";
        string safe = string.Concat("_", Regex.Replace(input, "[^a-z0-9_]+", "_"));
        Console.WriteLine(safe);
    }

Le underscore est inutile si le premier caractère du résultat regex est pas numérique.

Autres conseils

Voici une expression rationnelle que j'ai trouvé pourrait être utile pour séparer une partie de chaîne conforme CLS et une partie de chaîne non conforme CLS. Ci-dessous la mise en œuvre en C #:

string strRegex = @"^(?<nonCLSCompliantPart>[^A-Za-z]*)(?<CLSCompliantPart>.*)";
Regex myRegex = new Regex(strRegex, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
string strTargetString = @"                            _aaaaaa[5]RoundingHeader";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Add your code here
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top