Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

 

Předchozí článek
Přístup k okýnkům, Mutex, fce messengeru - ISIM
Všechny články v sekci
Programujeme vlastní Instant Messenger ::ISIM::
Přeskočit článek
(nedoporučujeme)
Konvert obrázků smajlíků do RTF , Safe Lock - ISIM
Článek pro vás napsal David Jančík
Avatar
Uživatelské hodnocení:
1 hlasů
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity