Robson Alves O que torna um sonho irrealizável é a inércia de quem sonha

21abr/112

Encontre no Texto com Expressões Regulares

Vou mostrar aqui 4 exemplos simples que captura texto, grupo de texto e faz replace dentro de um trecho via Expressão Regular

As ER's transferem um poder gigantesco quando necessitamos desta tarefas e até mesmo na geração de mascarás para textbox.

 

O REGEX possui algumas opções e é muito importante entender a funcionalidade de cada um para utilizar o ER da melhor forma:

http://msdn.microsoft.com/en-us/library/yd1hzczs(v=VS.100).aspx

RegexOptions,png

 

Vamos a prática.


Buscando Texto
 String Fonte = "aonde Quer Vá, Aonde Quer Que Seja, Ande com as pés";
 private void buscaTexto()
        {

            // Instância do Regex e a palavra que vamos buscar na fonte.
            Regex regex = new Regex("Aonde");

            // Armazena a coleção de Expressões Casadas.
            MatchCollection coll = regex.Matches(Fonte);

            foreach (Match item in coll)
            {
                lblResults.Text += String.Format(" Encontrei a palavra {0} na posição {1} e Termina na Posição {2}",
					item.Value.Trim(), item.Index, item.Index + item.Value.Length);
            }
        }

Quantidade de Letras por palavras

String Fonte = "aonde Quer Vá, Aonde Quer Que Seja, Ande com as pés";
 private void buscaTextoQtdLetras()
        {
            //Busca por palavras que contenha apenas Letras Maiuscula e Minuscula
            // e tenham 3 ou mais caracteres.
            Regex regex = new Regex("[a-zA-Z]{5,}");
            // Armazena a coleção de Expressões Casadas.
            MatchCollection coll = regex.Matches(Fonte);

            foreach (Match item in coll)
            {
                lblResults.Text += String.Format(" Encontrei a palavra {0} na posição {1} e Termina na Posição {2} Que Possui {3} ou Mais", item.Value.Trim(), item.Index, item.Index + item.Value.Length, item.Value.Length);
            }
        }

Extraindo Grupo do Text

 private void ExtraindoPorGrupos()
        {
            String End = "1234 Cherry Lane, USA" + Environment.NewLine + "1234 Apple Tree Drive, Smalltown, USA " + Environment.NewLine + "3456 Chry Orchard streetm Smalltown, USA";

            //Busca da esquerda pra direita após os numeros o nome da rua, pegando os espaços \\s entre as letras e pegando todas,
            //ignorando a virgula e tudo que vem após a mesma.
            Regex regex = new Regex("^(?\\d+)\\s*(?[\\w\\s]*)", RegexOptions.Multiline);

            MatchCollection coll = regex.Matches(End);

            foreach (Match item in coll)
            {
                string Rua = item.Groups["Rua"].Value;
                String Numero = item.Groups["Numero"].Value;
                lblResults.Text += ""+ String.Format("Rua : {0} ", Rua);
                lblResults.Text += "" + String.Format("Número :{0} ", Numero);
            }
        }

Replace Com Regex

private void ReplaceTexto()
        {
            Regex regex = new Regex("^[aA]\\w+");

            lblResults.Text += "" + regex.Replace(Fonte, "Por Onde");
        }

Após rodar a aplicação o seguinte resultado é gerado:

OutPut

Muito legal, acredito que isto ajudará a ter noção do que da pra ser feito com Regex e Expressões Regulares, compensa sim dar uma estuda na sintaxe ER para .Net.

Obrigado.

20abr/110

Session State

Vou falar um pouco dos tipos de status existentes nas sessions geradas na aplicação

Por Que Se Preocupar?

Os tipos de session possuim certas limitações que devem ser consideradas, após analisar o nível de acesso que o sistema terá ao longo do tempo, o tipo de hospedagem que este terá (Caso seja por terceiros), trâfego absoluto que o site tem.
Tudo isto deve ser levado em consideração na hora de utilizar Session em um sistema, a seguir ficará  mais claro os porquês desta preocupação.

Quais são os tipos ?

Os tipos são:
Inproc: Considerado o mais rápido dos tipos existente, por manter objetos em memória junto com o processo do ASP.Net.

StateServer: Aqui toda a sessão é serializada, assim tendo uma perca de performace quando comparado ao InProc, entretanto existe a possibilidade de enviar esta sessão para outro servidor tornar-se resposável pelo armazenamento destas informações, podendo assim ser uma boa escolha. Largamente recomendado quando existe um grande fluxo de usuário no site.
Para utilizar este serviço, procure nos serviços do Windows o processo chamado: ASP.NET State Services, para tal digite no executar, services.msc.
explor10Para
descobrir a porta do servidor qual será configurado para armazenar é necessário encontrar nos registros o mesmo.

SQLServer: Sim, a session é armazenada em banco de dados, e possuí também certa desvatagem performática, quando comparado ao Inproc, entretanto esta forma permite que a sessão seja recuperada desde que dentro da “Validade” da sessão gerada.

Para informar o tempo que será válida a sessão, assim como qual servidor atendará no armazenamento das informações das sessões ou qual o servidor e instâncias que será utilizado. explor5

Web-Config

Para cada tipo respectivamente, segue como deve ser declarado no Web.Config.
Inproc:


<system.web>
    <sessionState 

  mode="InProc" 

  timeout="1" 

  cookieless="false"> 

</sessionState> 

</system.web> 

StateServer:


<sessionState
    mode="StateServer" 

  cookieless="false" 

  stateNetworkTimeout="20" 

  stateConnectionString="127.0.0.1:42424"> 

</sessionState> 


SqlServer


<sessionState
    mode="StateServer" 

  timeout="20" 

  cookieless="false" 

  sqlConnectionString="Data Source=127.0.0.1;Trusted_Connection=Yes;"> 

</sessionState> 


Usando o Cookieless igual a "False", quer dizer que será gerado junto com a sessão Cookies.

Eu iria listar vantagem e desvantagens de cada um, mas isso tornaria uma análise extremamente pessoal, e como foi citado inicialmente isso deve ser utilizado após a análise das necessidades do sistema.

Para buscarem mais detalhes sobre este assunto:

http://www.codeproject.com/KB/aspnet/ExploringSession.aspx

Obrigado.

1abr/100

Colocar Confirm() no ASP:Menu

 

Bom Pessoal,para quem utiliza os benditor <asp:menu>, passa por algumas necessidades, como por exemplo, colocar javascript quando o cliente clicar sobre um dos itens.

Então Vamos a Solução:

Existe Duas Possibilidades, se você estiver carregando o menuItem por um datasource, será necessário utilizar o evento databound do <asp:menu>. Caso contrário você terá que fazer um foreach em MenuItem e adicionar o JavaScript no que você precisa.

Primeiramente o Código com Foreach:

 

foreach (MenuItem item in menuSuperior.Items)
            {
                if (item.Text == "Excluir")
                {
                    System.IO.StringWriter sw = new System.IO.StringWriter();
                    HtmlTextWriter htmWriter = new HtmlTextWriter(sw);
                    HyperLink menuLink = new HyperLink();
                    menuLink.NavigateUrl = item.NavigateUrl;
                    menuLink.Text = item.Text;
                    menuLink.Attributes["onClick"] = "return confirm('Are you sure?');";
                    menuLink.RenderControl(htmWriter);
                    item.Text = sw.ToString();
                }
            }

Caso Contrário:

protected void menu_MenuItemDataBound(object sender, MenuEventArgs e)
            {
                if (e.Item.Text == "Excluir")
                {
                    System.IO.StringWriter sw = new System.IO.StringWriter();
                    HtmlTextWriter htmWriter = new HtmlTextWriter(sw);
                    HyperLink menuLink = new HyperLink();
                    menuLink.NavigateUrl = e.Item.NavigateUrl;
                    menuLink.Text = e.Item.Text;
                    menuLink.Attributes["onClick"] = "return confirm('Are you sure?');";
                    menuLink.RenderControl(htmWriter);
                    e.Item.Text = sw.ToString();
                }
            }

 

Dessa forma ele gerá um confirm() quando selecionar este Item. Entretanto esta solução não possibilita que seja pego os childs.

Para que seja possível inserir o mesmo código dentro de sub-itens, faça o seguinte procedimento.

Com Foreach:

item.ChildItems[0].Text = sw.ToString();

o Zero indica o index do filho, ou seja, em um array, em qual posição está o filho!

No meu caso é o primeiro filho que me interessa!

Com site map:

e.item.ChildItems[0].Text = sw.ToString();

 

Acredito que ficou simples!

 

Abraços.

23jan/100

Publicando WebSite ASP.Net

Atualmente na criação de alguns sistemas que pretendo utilizar para minha satisfação e organização no dia-a-dia, venho sofrendo largamente no momento em que
necessito transferir minhas soluções para a internet, e não sofro por demora no envio do FTP, ou falta de espaço em disco rigido ou por ser extremamente difícil.
A surra que eu levo é do meu Web.Config que sempre retorna algum problema que faz que eu perca um largo tempo para achar a solução, incrível.

Inicialmente encontrei o error onde era informado que eu deveria setar no meu Web.Config a tag:

untitled

Isto para que o asp.net não trata-se qualquer erro e esconde-se do meu Front-End, após isso encarei o erro

403.14 - Parser Error Message: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.

Este erro não diz, mas espera que você agora crie realmente uma aplicação no IIS, desta forma preciso ir dentro do meu host e configurar o IIS (Apertar um botão) e aguardar que ele crie esta aplicação dentro do Mano IIS.

Agora sim tudo certo. você realmente configurou sua aplicação. Na internet você encontra também formas de acesso configurados pelo Web.Config, assim como permissões de páginas que dependendo do caso, são bem legais.

Como um adicional ao assunto, uma outra tag que foi necessário que eu precisei remover foi o <WebServer> ... </WebServer>

Comentem suas experiências!