Domanda

Qualcuno sa di un algoritmo (o una libreria esterna) che ho potuto chiamare per convertire una stringa arbitraria (cioè al di fuori del mio controllo) per essere compatibile con CLS?

sto generando un RDLC dinamica (Relazione Cliente Definition) per un controllo ASP.Net Visualizzatore report e alcuni del campo nomi devono basarsi sulle stringhe inserite dall'utente.

Purtroppo ho poco controllo sopra l'entrata dei nomi di campo da parte del cliente (attraverso un 3rd party CMS). Ma sono sostituzioni intorno abbastanza flessibili necessari per creare la stringa compatibile.

Ho un algoritmo di mod reattivo per ora lungo le linee di:

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(" ", "_");
}

Ma mi piacerebbe qualcosa di più completo. Tutte le idee?

NOTA: Se si tratta di alcun aiuto, l'algoritmo che sto usando per creare il RDLC dinamica si basa sul metodo di BuildRDLC trovato qui: http://csharpshooter.blogspot.com/2007/08/revised-dynamic-rdlc-generation.html

È stato utile?

Soluzione

Ecco l'algoritmo che uso per creare identificatori C / C ++ da stringhe arbitrarie (tradotto in 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);
    }

La sottolineatura non è necessaria se il primo carattere del risultato regex non è numerico.

Altri suggerimenti

Ecco una regex che ho trovato potrebbe essere utile per spaccare CLS-compliant parte stringa e non-CLS-compliant parte della stringa. Qui di seguito implementazione in 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
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top