none
Format String RRS feed

  • Pergunta

  • Pessoal, preciso formatar a seguinte string e gostaria de algumas sugestões de como fazer, mas gostaria muito de usar o String.Format, porem o que testei até agora não deu certo

    43121211020796000160550010000000291351694610

    tem que ficar

    4312 1211 0207 9600 0160 5500 1000 0000 2913 5169 4610

    o que tentei

    String.Format("{0:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000}", "43121211020796000160550010000000291351694610");

    quarta-feira, 5 de dezembro de 2012 12:38

Respostas

  • Pablo, veja esta solução usando de LINQ:

    int quantidadeLetrasGrupo = 4;
    
    string[] split = "43121211020796000160550010000000291351694610"
                .Select((l, index) => new { Letra = l, Grupo = index / quantidadeLetrasGrupo })
                .GroupBy(l => l.Grupo, l => l.Letra)
                .Select(g => string.Join("", g)).ToArray();
    
    string formatado = string.Join(" ", split);

    Definimos a quantidade de caracteres que vai conter cada grupo, usamos do extension Select() junto com a Func<> que retorna o index do iterador atual para dividir com a quantidadeLetrasGrupo para obtermos os grupo da letras.

    Apos isso, agrupamos pelo Grupo e Letra. Afim de organizarmos o grupo, juntamos este grupo usando do método string.Join("") para termos uma string com a quantidade exata que foi definida na variável "quantidadeLetrasGrupo".

    Por ultimo usamos do string.Join("") novamente passando como delimitador o espaço.

    :)


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Marcado como Resposta Pablotdv quarta-feira, 5 de dezembro de 2012 13:16
    quarta-feira, 5 de dezembro de 2012 13:06

Todas as Respostas

  • Bom para isso vc pode usar o proprio substring para formatar a string vinda des que a mesma tenha sempre o mesmo tamanho.

    abaixo segue um exemplo que usei num StreamReader qualquer dúvida estou a disposição

    DataTable table = new DataTable();

                    DataColumn column = null;
                    
                    column = new DataColumn("Relógio");
                    
                    table.Columns.Add(column);

                    column = new DataColumn("Funcionário");
                    table.Columns.Add(column);

                    column = new DataColumn("Data");
                    table.Columns.Add(column);

                    column = new DataColumn("Hora");
                    table.Columns.Add(column);

                    column = new DataColumn("Número Sequencial");
                    table.Columns.Add(column);

                    DataRow row = null;

                    StreamReader sreader = new StreamReader(txtArquivo.Text);
                    var texto = "";
                    while ((texto = sreader.ReadLine()) != null)
                    {

                        row = table.NewRow();

                        row["Relógio"] = Convert.ToInt32(texto.Substring(25, 8));
                        row["Funcionário"] = texto.Substring(6, 9);
                        row["Data"] = "" + texto.Substring(15, 2) + "/" + texto.Substring(17, 2) + "/" + texto.Substring(19, 2) + "";//linha que você vai usar.
                        row["Hora"] = "" + texto.Substring(19, 2) + ":" + texto.Substring(21, 2) + ":" + texto.Substring(23, 2) + "";
                        row["Número Sequencial"] = int.Parse(texto.Substring(33, 9));
                                     table.Rows.Add(row);
                        
                                                 }
                    
                        dataGridView1.DataSource = table;
                    
                }
                dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Descending);

    quarta-feira, 5 de dezembro de 2012 12:57
  • Pablo, veja esta solução usando de LINQ:

    int quantidadeLetrasGrupo = 4;
    
    string[] split = "43121211020796000160550010000000291351694610"
                .Select((l, index) => new { Letra = l, Grupo = index / quantidadeLetrasGrupo })
                .GroupBy(l => l.Grupo, l => l.Letra)
                .Select(g => string.Join("", g)).ToArray();
    
    string formatado = string.Join(" ", split);

    Definimos a quantidade de caracteres que vai conter cada grupo, usamos do extension Select() junto com a Func<> que retorna o index do iterador atual para dividir com a quantidadeLetrasGrupo para obtermos os grupo da letras.

    Apos isso, agrupamos pelo Grupo e Letra. Afim de organizarmos o grupo, juntamos este grupo usando do método string.Join("") para termos uma string com a quantidade exata que foi definida na variável "quantidadeLetrasGrupo".

    Por ultimo usamos do string.Join("") novamente passando como delimitador o espaço.

    :)


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Marcado como Resposta Pablotdv quarta-feira, 5 de dezembro de 2012 13:16
    quarta-feira, 5 de dezembro de 2012 13:06
  • Muito obrigado Vitor, gostei do exemplo
    quarta-feira, 5 de dezembro de 2012 13:15