6. díl - Konverter, práce s textem - ISIM

C# .NET Pro pokročilé Instant Messenger Konverter, práce s textem - ISIM

Je také velmi nápomocná třída Converter, která obsahuje metody například GetContactName/ID/A­vatar atd. které rozpoznají daný parametr a najdou v něm požadovanou informaci a vrátí ji. Což velmi usnadní práci, tam, kde se objevují objekty různých druhů. Ovšem například v třídách pro práci s knihovnou Skype, kde vím, co chci použít a neplete se to, můžu klidně psát hned co potřebuji.

Jen lehký příkládek:

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;
        }
}

Pak také používám třídu TextEdit, která zajišťuje práci s textem. Přidává rozšíření například Split která se využívá u SMS a Facebooku, kde je třeba zprávu rozdělit, pokud má více znaků, než je možné poslat. Nebo odstranění XML tagů, které posílá Skype, smajlíci aj.

Zase vypíšu jen to zajímavé a popíšu co to dělá.

public static class TextEdit
{

Pokud dám klíčové slůvko this před datový typ parametru, udělám si pro něj rozšíření. Takže teď můžu napsat -> "něco".SplitStrin­g(2). Je nutné mít takovou metodu v nevnořené třídě.

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;
}

Dycky mě štvalo, jak zkracovali název a přidávali ... tečky ... do slov jako napříkla... kde bylo zřejmé, že stačí jedno dvě pímenka aby to slovo skončilo a ty tečky mu to skazily. Proto 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;
}

Tohle mi všude tvrdili, že nejde a že je třeba strašně moc externích knihoven. Ale já jim nevěřil... Používá se u Skype, který posílá zprávy v XML. Doporučuji shlédnout je to něco jako <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("&apos;", "'");

        foreach (var entity in entityExtended)
                decodedText = decodedText.Replace(entity.Key, entity.Value);

        return decodedText;
}

 

  Aktivity (1)

Článek pro vás napsal David Jančík [sczdavos]
Avatar
Autor je vášnivý programátor v .NET C# a PHP. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.

Jak se ti líbí článek?
Celkem (1 hlasů) :
55555


 



 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!