Hoje gostaria de informar e mostrar como encontrar um valor de uma string grande, isto é, “stringona” separada com algum caracter especial. Antigamente existia o Split e ainda existe, mas para este nosso caso não é apropriado. 

Para quem quiser ver mais sobre o Split no C#.NET, acesse o link abaixo:
http://ecode10.com/artigo/554/Usando+Split+No+CSharp.aspx

Este documento informa como pegar valores específicos dentro de um conjunto de caracteres misturados ou juntados sem organização. Para isso, o presente documento mostra exemplos reais e funcionais.

O primeiro passo é construir um método específico que faça isso. (Code 1.1)

        /// <summary>

        /// Busca um texto associado a um campo em uma linha de informações.

        /// </summary>

        /// <param name="title">Nome do campo.</param>

        /// <param name="textLine">Linha de informações.</param>

        /// <param name="sep">Caracter separador.</param>

        /// <param name="appendTitle">Se true, inclui o nome do campo no retorno.</param>

        /// <returns>O texto associado a um campo em uma linha de informações.</returns>

        public static string EncontrarValor(string title, string textLine, char sep, bool appendTitle)

        {

            if (String.IsNullOrEmpty(title)) return "";

            if (String.IsNullOrEmpty(textLine)) return "";

            if (sep == '\u0000') return "";

            int titlePos = textLine.IndexOf(title + "=");

            if (titlePos == -1) return "";

            if (!appendTitle) titlePos += title.Length + 1;

            int SepPos = textLine.IndexOf('|', titlePos);

            if (SepPos > -1)

                return textLine.Substring(titlePos, (SepPos - titlePos));

            else

                return textLine.Substring(titlePos);

        }

Code 1.1

                  Este método é do tipo estático, tem como retorno o tipo string e recebe como parâmetro vários tipos de variáveis diferentes. A primeira do tipo string, a segunda também do tipo string, o terceiro char e o quarto bool.

                  O primeiro parâmetro é o nome do campo que deseja buscar, o segundo é o valor misturado “aquele stringao” , o terceiro é o tipo de caracter de separação por exemplo: “ §”,  “-“, “/”, “|” ou qualquer outro parecido. Você escolhe qual caracter. O último campo de parâmetro de entrada deve ser passado true ou false. Isso quer dizer que você pode receber de volta o campo e o texto ou só o texto. Se for passado false, você recebe só o valor do texto e se for passado true você recebe o valor e nome do campo.

                  Não é nada complexo mas precisamos desse tipo de coisa. Para adiantar o meu caso, criei outros métodos para consumir desse método maior. (Code 1.2 e 1.3)

        /// <summary>

        /// Busca um texto associado a um campo em uma linha de informações.

        /// </summary>

        /// <param name="title">Nome do campo.</param>

        /// <param name="textLine">Linha de informações.</param>

        /// <returns>O texto associado a um campo em uma linha de informações.</returns>

        public static string FindTextValue(string title, string textLine)

        {

            return EncontrarValor(title, textLine, '|', false);

        }

Code 1.2

                  O método Code 1.2 consome o Code 1.1 passando dois valores fixos como o char “|” e o “false” informando que só quer o valor de retorno e não o campo.

        /// <summary>

        /// Busca um texto associado a um campo em uma linha de informações.

        /// </summary>

        /// <param name="title">Nome do campo.</param>

        /// <param name="textLine">Linha de informações.</param>

        /// <param name="sep">Caracter separador.</param>

        /// <returns>O texto associado a um campo em uma linha de informações.</returns>

        public static string FindTextValue(string title, string textLine, char sep)

        {

            return EncontrarValor(title, textLine, sep, false);

        }

Code 1.3

                  O método Code 1.3 já passa apenas um valor fixo que é o último “false” para não retornar o valor o e campo.

                  Imagine a sua string dessa maneira: NOME=MAURICIO JUNIOR|IDADE=29|ENDERECO=WWW.MAURICIOJUNIOR.ORG|TELEFONE=0090980

                  Esses métodos pegam a “stringona” e separada. Para utilizar, escrevi o código abaixo para a plataforma Windows Forms. (Code 1.4)

        private void Form1_Load(object sender, EventArgs e)

        {

            string valor = "NOME=MAURICIO JUNIOR|IDADE=29|ENDERECO=WWW.MAURICIOJUNIOR.ORG";

            string nome = Util.EncontrarValor("NOME", valor, '|', false);

            MessageBox.Show(nome);

        }

Code 1.4

                  O resultado do Code 1.4 mostra em alerta. (Imagem 1)

Imagem 1

                  Pedi agora para pegar a IDADE em vez do NOME. (Imagem 2)

Imagem 2

                  Bom, espero que tenha gostado e qualquer dúvida pode entrar em contato. 

This article was originally written by:

Maurício Júnior
MCP, MCAD, MVP Microsoft
www.mauriciojunior.org
blog.mauriciojunior.org