none
Substring RRS feed

  • Pergunta

  • Bom dia pessoal. Vê se vocês podem me ajudar? Tenho uma string que pode ser carregada com até 720 caracteres.  No momento de imprimir essa string eu pego 120 caracteres de cada vez e imprimo. Porém, quando faço cLinha1.substring(1, 120) e só tem 10 caracteres na string dá error. Podem me ajudar?

    Garibaldo

    quinta-feira, 16 de julho de 2015 12:10

Respostas

  • Eugênio, agradeço pela ajuda. Estou deixando aqui uma classe que eu criei. É uma classe simples(uma vez que estou aprendendo o C# agora), porém, resolveu o meu problema e espero ajudar mais alguém.
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Interface.BLL
    {
        public class aSeparandoString
        {
            string[] aLinha = new string[100];
            string sNomeString;
            int nTamanhoLinha;
            int nNumeroCaracteres;
    
            int nIndLinha;
            int nIndVetor = 1;
            int nFlag;
    
            public void separandoString(string[] aLinha, int nTamanhoLinha, string sNomeString)
            {
                nNumeroCaracteres = sNomeString.Length;
                if (nTamanhoLinha >= nNumeroCaracteres)
                {
                    aLinha[1] = sNomeString;
                    this.aLinha[1] = aLinha[1];
                    return;
                }
                for(int nIndString = 0; nIndString < nNumeroCaracteres; nIndString++)
                {
                    nFlag = 0;
                    nIndLinha++;
                    aLinha[nIndVetor] = aLinha[nIndVetor] + sNomeString.Substring(nIndString,1);
                    if (nIndLinha == nTamanhoLinha)
                    {
                        this.aLinha[nIndVetor] = aLinha[nIndVetor];
                        nIndLinha = 0;
                        nIndVetor++;
                        nFlag = 1;
                    }
                }
                if (nFlag != 1)
                {
                    this.aLinha[nIndVetor] = aLinha[nIndVetor];
                }
            }       
        }
    }



    quinta-feira, 16 de julho de 2015 16:40

Todas as Respostas

  • Bom dia,

    tenta fazer uma validação antes de usar o substring, exemplo:

    string v_string = "";

    if (cLinha1.Length >= 120)

    {

        v_string = cLinha1.substring(1, 120)

    }

    else

    {

       v_string = Repassa todo o conteúdo sem precisar usar Substring;

    }

    Imprimir a variavel v_string.
    quinta-feira, 16 de julho de 2015 12:19
  • Só para complementar a resposta do Eugenio, o erro acontece pois você está tentado buscar 120 caracteres de uma string que possui somente 10, por isso acontece o erro.
    quinta-feira, 16 de julho de 2015 12:32
  • Legal Eugê
                if (cObservacoes.Length >= 120)
                {
                    cLinha1 = cObservacoes.Substring(1, 120);
                    if (cObservacoes.Substring(121, 240).Length >= 120)
                    {
                        cLinha2 = cObservacoes.Substring(121, 240);
                        if (cObservacoes.Substring(241, 360).Length >= 120)
                        {
                            cLinha3 = cObservacoes.Substring(241, 360);
                            if (cObservacoes.Substring(361, 480).Length >= 120)
                            {
                                cLinha4 = cObservacoes.Substring(361, 480);
                                if (cObservacoes.Substring(481, 600).Length >= 120)
                                {
                                    cLinha5 = cObservacoes.Substring(481, 600);
                                    if (cObservacoes.Substring(601, 720).Length >= 120)
                                    {
                                        cLinha6 = cObservacoes.Substring(601, 720);
                                    }
                                    else
                                    {
                                        cLinha6 = cObservacoes.Substring(601, 720).Length;
                                    }
    
                                }
                                else
                                {
                                    cLinha5 = cObservacoes.Length;
                                }
                            }
                            else
                            {
                                cLinha4 = cObservacoes.Length;
                            }
                        }
                        else
                        {
                            cLinha3 = cObservacoes.Length;
                        }
                    }
                    else
                    {
                        cLinha2 = cObsercacoes.Lenght;
                    }
    
                }
                else
                {
                    cLinha1 = cObservacoes;
                }
    

    nio entendi, porém, como eu posso resolver esse problema?
    quinta-feira, 16 de julho de 2015 13:18
  • Para o caso de possuir apenas 10 dígitos já tem a validação certa aí. Primeiro ele verifica se tem 120 ou mais caracteres. Senão ele repassa o valor direto pra variavel no else (cLinha1 = cObservacoes).

    Onde que está ocorrendo o problema?

    quinta-feira, 16 de julho de 2015 14:08
  • Eugênio, agradeço pela ajuda. Estou deixando aqui uma classe que eu criei. É uma classe simples(uma vez que estou aprendendo o C# agora), porém, resolveu o meu problema e espero ajudar mais alguém.
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Interface.BLL
    {
        public class aSeparandoString
        {
            string[] aLinha = new string[100];
            string sNomeString;
            int nTamanhoLinha;
            int nNumeroCaracteres;
    
            int nIndLinha;
            int nIndVetor = 1;
            int nFlag;
    
            public void separandoString(string[] aLinha, int nTamanhoLinha, string sNomeString)
            {
                nNumeroCaracteres = sNomeString.Length;
                if (nTamanhoLinha >= nNumeroCaracteres)
                {
                    aLinha[1] = sNomeString;
                    this.aLinha[1] = aLinha[1];
                    return;
                }
                for(int nIndString = 0; nIndString < nNumeroCaracteres; nIndString++)
                {
                    nFlag = 0;
                    nIndLinha++;
                    aLinha[nIndVetor] = aLinha[nIndVetor] + sNomeString.Substring(nIndString,1);
                    if (nIndLinha == nTamanhoLinha)
                    {
                        this.aLinha[nIndVetor] = aLinha[nIndVetor];
                        nIndLinha = 0;
                        nIndVetor++;
                        nFlag = 1;
                    }
                }
                if (nFlag != 1)
                {
                    this.aLinha[nIndVetor] = aLinha[nIndVetor];
                }
            }       
        }
    }



    quinta-feira, 16 de julho de 2015 16:40
  • Beleza, Garibaldo.
    quinta-feira, 16 de julho de 2015 16:53