none
Quebra string de 3 em 3 caracteres C# RRS feed

  • Pergunta

  • Boa Noite a todos

    tenho uma string da seguinte forma 

    string teste = "030060090120130140";

    preciso quebra ela de 3 em 3 caracteres e em cada 3 ele adiciona em um datagrid ou seja ficaria da seguinte forma

    Coluna Dias

    30

    60

    90

    120

    130

    140

    alguém tem ideia de como faço isso der de já agradeço a todos.


    segunda-feira, 11 de abril de 2016 21:11

Respostas

  • Boa tarde,

    Se entendi sua lógica, sempre sua string será agrupado de 3 em 3 caracteres ou seja se contar os caracteres da string e dividir por 3 dará resto zero. Sendo assim o código abaixo funciona, caso contrário basta pegar o resto da divisão em implementar na lógica de maneira a pegar os caracteres restantes.

    List<string> list = new List<string>();
    string teste = "0300600901201301402";
    int posInicial = 0;
    for (int i = 0; i < teste.Length / 3; i++)
    {
        list.Add(teste.Substring(posInicial, 3));
        posInicial += 3;
    }
    dataGridView1.DataSource = list.Select(x => new { Value =  Convert.ToInt32(x) }).ToList();

    Espere ter ajudado.

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Sugerido como Resposta Silvaney segunda-feira, 11 de abril de 2016 22:02
    • Não Sugerido como Resposta Silvaney terça-feira, 12 de abril de 2016 01:30
    • Marcado como Resposta Marcos SJ terça-feira, 12 de abril de 2016 11:31
    segunda-feira, 11 de abril de 2016 21:57
  • Outra alternativa é com Regex:

    var teste = "03006009012013014";
    var lista = Regex.Matches(teste, ".{1,3}").OfType<Match>().Select(p => p.ToString());
    dataGridView1.DataSource = lista.Select(x => new {Valores = x}).ToList();

    Att,


    Antero Marques

    ________________________________________________________________________

    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.

    O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.


    • Editado Antero Marques segunda-feira, 11 de abril de 2016 23:09
    • Marcado como Resposta Marcos SJ terça-feira, 12 de abril de 2016 11:31
    segunda-feira, 11 de abril de 2016 23:09
  • Bom dia,

    Basta você fazer essa alteração:

    dataGridView1.DataSource = lista.Select((r, i) => new { Row = (i + 1), Valores = r }).ToList();

    Espero ter ajudado.

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Sugerido como Resposta Silvaney terça-feira, 12 de abril de 2016 13:01
    • Marcado como Resposta Rhael_Andrade terça-feira, 12 de abril de 2016 13:05
    terça-feira, 12 de abril de 2016 13:01
  • Bom dia,

    Se você tiver utilizando o exemplo que te passei, utilizando "for" pode substituir por este:

    for (int i = 0; i < teste.Length / 3; i++)
    {                
        this.dataGridView1.Rows.Add((i + 1), teste.Substring(posInicial, 3));
        posInicial += 3;
    }

    Remova então a linha:
    dataGridView1.DataSource = list.Select(x => new { Value =  Convert.ToInt32(x) }).ToList();

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Marcado como Resposta Rhael_Andrade terça-feira, 12 de abril de 2016 14:17
    terça-feira, 12 de abril de 2016 14:04

Todas as Respostas

  • Boa tarde,

    Se entendi sua lógica, sempre sua string será agrupado de 3 em 3 caracteres ou seja se contar os caracteres da string e dividir por 3 dará resto zero. Sendo assim o código abaixo funciona, caso contrário basta pegar o resto da divisão em implementar na lógica de maneira a pegar os caracteres restantes.

    List<string> list = new List<string>();
    string teste = "0300600901201301402";
    int posInicial = 0;
    for (int i = 0; i < teste.Length / 3; i++)
    {
        list.Add(teste.Substring(posInicial, 3));
        posInicial += 3;
    }
    dataGridView1.DataSource = list.Select(x => new { Value =  Convert.ToInt32(x) }).ToList();

    Espere ter ajudado.

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Sugerido como Resposta Silvaney segunda-feira, 11 de abril de 2016 22:02
    • Não Sugerido como Resposta Silvaney terça-feira, 12 de abril de 2016 01:30
    • Marcado como Resposta Marcos SJ terça-feira, 12 de abril de 2016 11:31
    segunda-feira, 11 de abril de 2016 21:57
  • Outra alternativa é com Regex:

    var teste = "03006009012013014";
    var lista = Regex.Matches(teste, ".{1,3}").OfType<Match>().Select(p => p.ToString());
    dataGridView1.DataSource = lista.Select(x => new {Valores = x}).ToList();

    Att,


    Antero Marques

    ________________________________________________________________________

    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.

    O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.


    • Editado Antero Marques segunda-feira, 11 de abril de 2016 23:09
    • Marcado como Resposta Marcos SJ terça-feira, 12 de abril de 2016 11:31
    segunda-feira, 11 de abril de 2016 23:09
  • deu certo valeu ai Antero marque e Silvaney

    so pintou uma duvida se eu precisar contar as colunas tipo 

    Parc    Dias

    1        30 

    2        60

    3        90

    4        120

    5        130

    como eu faria com esse código?

    terça-feira, 12 de abril de 2016 12:41
  • Bom dia,

    Basta você fazer essa alteração:

    dataGridView1.DataSource = lista.Select((r, i) => new { Row = (i + 1), Valores = r }).ToList();

    Espero ter ajudado.

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Sugerido como Resposta Silvaney terça-feira, 12 de abril de 2016 13:01
    • Marcado como Resposta Rhael_Andrade terça-feira, 12 de abril de 2016 13:05
    terça-feira, 12 de abril de 2016 13:01
  • Deu certo valeu ai 
    terça-feira, 12 de abril de 2016 13:08
  • agora tem um outro problema 

    não consigo editar a coluna manualmente pq?

    terça-feira, 12 de abril de 2016 13:23
  • Bom dia,

    Se você tiver utilizando o exemplo que te passei, utilizando "for" pode substituir por este:

    for (int i = 0; i < teste.Length / 3; i++)
    {                
        this.dataGridView1.Rows.Add((i + 1), teste.Substring(posInicial, 3));
        posInicial += 3;
    }

    Remova então a linha:
    dataGridView1.DataSource = list.Select(x => new { Value =  Convert.ToInt32(x) }).ToList();

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Marcado como Resposta Rhael_Andrade terça-feira, 12 de abril de 2016 14:17
    terça-feira, 12 de abril de 2016 14:04