6. diel - Konverter, práca s textom - isim
Je tiež veľmi nápomocná trieda Converter, ktorá obsahuje metódy napríklad GetContactName / ID / Avatar atď. Ktoré rozpoznajú daný parameter a nájdu v ňom požadovanú informáciu a vráti ju. Čo veľmi uľahčí prácu, tam, kde sa objavujú objekty rôznych druhov. Avšak napríklad v triedach pre prácu s knižnicou Skype, kde viem, čo chcem použiť a nepletie sa to, môžem pokojne písať hneď čo potrebujem.
Len ľahký prikládok:
public static class Converter { public static Availability GetContactAvailability(object contact) { if (contact is SktContact) { switch ((contact as SktContact).P_AVAILABILITY) { case SktContact.AVAILABILITY.NOT_AVAILABLE: case SktContact.AVAILABILITY.NOT_AVAILABLE_FROM_MOBILE: case SktContact.AVAILABILITY.AWAY_FROM_MOBILE: case SktContact.AVAILABILITY.AWAY: return Availability.Away; ... default: return Availability.Invisible; } } if (contact is PresenceType) { switch ((PresenceType)contact) { case PresenceType.available: return Availability.Online; ... } } if (contact is IcqSharp.Base.Status) { switch ((IcqSharp.Base.Status)contact) { case IcqSharp.Base.Status.Online: case IcqSharp.Base.Status.FreeForChat: return Availability.Online; .... } } return Availability.Offline; } }
Potom tiež používam triedu TextEdit, ktorá zabezpečuje prácu s textom. Pridáva rozšírenie napríklad Split ktorá sa využíva pri SMS a Facebooku, kde je potrebné správu rozdeliť, ak má viac znakov, než je možné poslať. Alebo odstránenie XML tagov, ktoré posiela Skype, smajlíci ai.
Zase vypíšem len to zaujímavé a popíšem čo to robí.
public static class TextEdit {
Ak dám kľúčové slovko this
pred dátový typ parametra,
urobím si pre neho rozšírenie. Takže teraz môžem napísať -> "niečo"
.SplitString (2). Je nutné mať takú metódu v nevnořené triede.
public static IEnumerable<string> SplitString(this string input, int outputStringLength) { var count = 0; while (count < input.Length) { var length = Math.Min(outputStringLength, input.Length - count); yield return string.Format("{0}", input.Substring(count, length)); count += outputStringLength; } } public static string RemoveDiacritics(this string inputString) { String normalizedString = inputString.Normalize(NormalizationForm.FormD); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < normalizedString.Length; i++) { Char c = normalizedString[i]; if (System.Globalization.CharUnicodeInfo.GetUnicodeCategory(c) != System.Globalization.UnicodeCategory.NonSpacingMark) stringBuilder.Append(c); } return stringBuilder.ToString(); }
/// <summary> /// Smaže neplatné znaky - používá se pro zápis do souboru, aby neobsahoval neplatné znaky /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static string RemoveInvalidCharactersFromFileName(string fileName) { if ((fileName.Length > 0) && (fileName.Substring(0, 1) == "-")) fileName = fileName.Substring(1); return Strip(fileName, "\\", "/", ":", "*", "?", "\"", "<", ">", "|"); } private static string Strip(string input, params string[] removals) { foreach (string removal in removals) { input = input.Replace(removal, ""); } return input; }
Dy ma štvalo, ako skracovali názov a pridávali ... bodky ... do slov ako napríklat ... kde bolo zrejmé, že stačí jedno dve pímenka aby to slovo skončilo a tie bodky mu to skazily. Preto tam je to + 3.
/// <summary> /// ZKrátí text na danou délku /// </summary> /// <param name="text"></param> /// <param name="length"></param> /// <returns></returns> public static string SortText(this string text, int length) { if (text.Length > length + 3) return text.Substring(0, length) + "..."; return text; }
Toto mi všade tvrdili, že nejde a že treba strašne veľa externých knižníc. Ale ja im neveril ... Používa sa u Skype, ktorý posiela správy v XML. Odporúčam zhliadnuť je to niečo ako <ss type = "smile">: -) </ ss>
/// <summary> /// Smaže html tagy /// </summary> /// <param name="text">Text</param> /// <returns>Text bez html tagů</returns> public static string StripHtmlTags(string text) { return System.Text.RegularExpressions.Regex.Replace(text, "<.*?>", string.Empty); } /// <summary> /// Dekóduje html entity /// </summary> /// <param name="text">Text</param> /// <returns>Text s dekódovanýma entitama</returns> public static string DecodeHtmlEntities(string text) { // dekóduje základní entity string decodedText = System.Web.HttpUtility.HtmlDecode(text); // přidání speciálních entit, které to nedekóduje Dictionary<string, string> entityExtended = new Dictionary<string, string>(); entityExtended.Add("'", "'"); foreach (var entity in entityExtended) decodedText = decodedText.Replace(entity.Key, entity.Value); return decodedText; }