Jump to content

Obter os Valores ABCD de um string "(A,B,C,D)"


brunuu
 Share

Recommended Posts

Eu queria obter os valores de um string que está assim por exemplo (A,B,C,D),

O meu objetivo é retirar o valor A, B, C e D e guardar o respetivo para 4 vareaveis.

Agora já tentei fazer isto de uma maniera pouco prática que era remover os ( e , por espaços branco, fazer Trim, e depois ir removendo caracteres aos pontos para dentro de uma vareavel só que este método tinha problemas quando havia espaços entre os valores.

Os valores ABCD também só são número portanto não ha problemas com o remover das virgulas ou parênteses.

Edited by brunuu
Link to comment
Share on other sites

Se vão estar escritos nesse formato, o código que postei acima faz o que pretendes... ?

Faz, só que deixa passar as parênteses

portanto antes de entrar no foreach, eu removo as parênteses por um espaço nulo, e apenas peço por procurar pelos separadores com virgulas e uso por exemplo isto

MessageBox.Show(valores[0]);

MessageBox.Show(valores[1]);

MessageBox.Show(valores[2]);

MessageBox.Show(valores[3]);

Para ir buscar cada valor a cada.

Portanto sim o a duvida já esta resolvida

Obrigado

Link to comment
Share on other sites

simples ok, melhor ... duvido

Dúvidas porquê? Usar 5 simbolos que ninguém entende, cada um faz diferente para o mesmo problema, já não falo da performance que perdes.

Mas podes postar aí, eu estou aqui para aprender também.

Edit: Regex é que 'parece' simples, por isso é que é usado.

Edit2: Antes que venhas contra o meu edit, eu sei que regex é dificil, estava a referir-me ao facto do facto de ele ser dificil e quem o usa provavelmente copiou da internet porque alguém já o teve de fazer... (provavelmente)

Edited by He B Te My
Link to comment
Share on other sites

Edit2: Antes que venhas contra o meu edit, eu sei que regex é dificil, estava a referir-me ao facto do facto de ele ser dificil e quem o usa provavelmente copiou da internet porque alguém já o teve de fazer... (provavelmente)

não ... o regex é fácil para quem sabe, o que é uma pena que as pessoas que se iniciaram em informática já na era das janelinhas, que não fazem ideia de como isso funciona ...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace string_search_test
{
   class Program
   {
       static void Main(string[] args)
       {
           string haystack = "(happyhippyhippo,brunu,He B Te My,ups a text with () in the middle)";

           {
               Console.WriteLine("String split method : ");
               char[] separator = { '(', ',', ')' };
               foreach (var sss in haystack.Split(separator, StringSplitOptions.RemoveEmptyEntries))
               {
                   Console.WriteLine(sss);
               }
               Console.WriteLine("----------------------");
           }

           {
               Console.WriteLine("Regex method : ");
               Regex rx = new Regex(@"(?<=^\()(.+?)(?=,)|(?<=,)(.+?)(?=,)|(?<=,)(.+?)(?=\)$)", RegexOptions.IgnoreCase);
               MatchCollection matches = rx.Matches(haystack);
               foreach (Match match in matches)
               {
                   GroupCollection groups = match.Groups;
                   Console.WriteLine(groups[0].Value);
               }
               Console.WriteLine("----------------------");
           }

           {
               Console.WriteLine("Inteligent split method : ");
               char[] separator = { ',' };
               foreach (var sss in haystack.Substring(1, haystack.Length - 2).Split(separator, StringSplitOptions.RemoveEmptyEntries))
               {
                   Console.WriteLine(sss);
               }
               Console.WriteLine("----------------------");
           }

           {
               Console.WriteLine("Regex method (all in one) : ");
               Regex rx = new Regex(@"^\((?<A>[^,]+?),(?<B>[^,]+?),(?<C>[^,]+?),(?<D>[^,]+?)\)$", RegexOptions.IgnoreCase);
               MatchCollection matches = rx.Matches(haystack);
               GroupCollection groups = matches[0].Groups;
               Console.WriteLine(groups["A"].Value);
               Console.WriteLine(groups["B"].Value);
               Console.WriteLine(groups["C"].Value);
               Console.WriteLine(groups["D"].Value);
               Console.WriteLine("----------------------");
           }

           Console.ReadKey();
       }
   }
}
Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Achas isso melhor em termos de performance e de leitura que usando split()?

Regex é fácil? Essa é nova... lol, digo eu que não percebo nada disso... nem desejo perceber e espero nunca ser forçado a usar...

agora sinceramente... eu olho para isto

<=^\()(.+?)(?=,)|(?<=,)(.+?)(?=,)|(?<=,)(.+?)(?=\)$)"
apetece-me apagar completamente o código e esquecer que Regex existe, mas essa é a minha opinião, não consigo entender nada disso e dúvido que muitos entendam.
Link to comment
Share on other sites

Não referiste porque não tens argumentos contra ela, logo, concordas comigo, ou estou errado?

Digo que demora anos baseado nos anos que programo e no que vi online até hoje, se tás a dizer o contrário isso é novidade, já vi pessoas experientes a dizer o mesmo, mas continuas a não me contradizer, apenas tás contra a minha opinião sem razão aparente, eu respeito isso, mas não vou argumentar mais por aqui.

Boa noite. / dia.

Link to comment
Share on other sites

se programas à anos, já era tempo de tirares um par de dias para ler uma boa documentação de regex, e se é novidade, é novidade para ti.

e que tal perguntares aqui no fórum, a pessoas que perderam tempo a aprender, se acham assim um bicho de sete cabeças, sendo necessário esse tempo todo para aprender ? (ou mesmo mais do que um par de dias)

no que toda a argumentos, acho que se necessito de argumentar a afirmação

simples ok, melhor ... duvido

seria cair em saco roto, por te faltar conhecimento nas capacidades do regex.

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.