none
DÚVIDA COMO CONSTRUIR UMA REGRA RRS feed

  • Pergunta

  • Seguinte, imaginem que tenho uma variavel com esse valor:

    String Test = "ABS_TRF@1454987 (2), ABS_TRFX@11255 (3), ABS_TRFX@22222"

    QUERO q ele retorne isso pra mim, o numero entre parenteses representa ele 2 vezes ou seja.. quero q retorne e que fique assim:

    String Test = "ABS_TRF@1454987, ABS_TRF@1454987,ABS_TRFX@11255,ABS_TRFX@11255,ABS_TRFX@11255, ABS_TRFX@22222".

    Como faria um codigo pratico pra isso.

    quarta-feira, 25 de janeiro de 2017 17:36

Respostas

  • Olá, segue minha solução. 

    	string txt = "ABS_TRF@1454987 (2), ABS_TRFX@11255 (3), ABS_TRFX@22222";
    	string[] colunas = txt.Split(',');
    	int x = 0;
    	txt = "";
    	while (x < colunas.Length) {
    		string aux = "";
    		if (colunas[x].IndexOf(')') != -1){
    			aux = colunas[x];
    			int y = Convert.ToInt32(aux.Substring(aux.Length-2, 1));
    			while (y > 0) {
    				if (txt.Equals("")){
    					txt = txt + colunas[x].Substring(0, colunas[x].Length-4);
    				} else {
    					txt = txt + ", " + colunas[x].Substring(0, colunas[x].Length-4);
    				}			
    				y--;
    			}
    		} else {
    			if (!txt.Equals("")){
    				txt = txt + ", ";
    			}
    			txt = txt + colunas[x];
    		}
    		x++;
    	}	


    Espero ter ajudado. 


    quarta-feira, 25 de janeiro de 2017 18:47

Todas as Respostas

  • Boa tarde Alan,

    No momento estou sem Visual Studio, fiz uma possível solução em VBA, caso te atenda, só adaptar para C#.Se necessário posso fazer à adaptação mais tarde:

    Sub DistribuirString()
        Dim test As String
        Dim i, j As Integer
        
        test = "ABS_TRF@1454987 (2), ABS_TRFX@11255 (3), ABS_TRFX@22222"
        
        arrItem = Split(test, ",") 'Dividir os item em um Array
        
        For i = 0 To UBound(arrItem)
            
            arrExtrair = Split(arrItem(i), "(") 'Separar a informação a ser duplicada e o numero de loops
            
            If UBound(arrExtrair) = 0 Then 'Capturar o número de loops, caso o mesmo não exista, colocar 1
                NumLoop = 1
            Else
                NumLoop = CInt(Replace(arrExtrair(1), ")", ""))
            End If
            
            For j = 1 To NumLoop 'Gravar os valores na variável
                Resultado = Resultado & Trim(arrExtrair(0))
                
                If i <> UBound(arrItem) Then Resultado = Resultado & "," 'Evitar que coloque a virgula no último item
            Next j
        Next i
        
    End Sub

    quarta-feira, 25 de janeiro de 2017 18:15
  • achei q teria um código menor
    quarta-feira, 25 de janeiro de 2017 18:20
  • eu fiz 1, e to suspeitando que ta lento meu codigo pq tem for.. achei q conseguia resolver esse problema com umas 4 linhas de código
    quarta-feira, 25 de janeiro de 2017 18:20
  • Realmente Alan, dependendo do número de itens pode ficar lento, tem que testar à performance.
    quarta-feira, 25 de janeiro de 2017 18:22
  • Olá, segue minha solução. 

    	string txt = "ABS_TRF@1454987 (2), ABS_TRFX@11255 (3), ABS_TRFX@22222";
    	string[] colunas = txt.Split(',');
    	int x = 0;
    	txt = "";
    	while (x < colunas.Length) {
    		string aux = "";
    		if (colunas[x].IndexOf(')') != -1){
    			aux = colunas[x];
    			int y = Convert.ToInt32(aux.Substring(aux.Length-2, 1));
    			while (y > 0) {
    				if (txt.Equals("")){
    					txt = txt + colunas[x].Substring(0, colunas[x].Length-4);
    				} else {
    					txt = txt + ", " + colunas[x].Substring(0, colunas[x].Length-4);
    				}			
    				y--;
    			}
    		} else {
    			if (!txt.Equals("")){
    				txt = txt + ", ";
    			}
    			txt = txt + colunas[x];
    		}
    		x++;
    	}	


    Espero ter ajudado. 


    quarta-feira, 25 de janeiro de 2017 18:47
  • Bom dia,

    Devido a falta de interação do autor dessa pergunta,

    essa thread está sendo fechada. Caso o problema ainda

    esteja ocorrendo, favor abrir uma nova thread.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 27 de janeiro de 2017 11:18
    Moderador