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.