Ir ao conteúdo

Posts recomendados

Postado

Eae galera tudo bom ?

Galera eu estou com um problema em meu código que quando o mesmo identifica um espaço vazio " " no arquivo .txt que o mesmo esta lendo ele da erro.

Para entenderem melhor vamos começar do início.

Eu tenho um algorítimo em C++ criado para ler linha por linha de um arquivo .txt, quando o mesmo identificar a linha na qual estamos buscando ele irá abrir um arquivo .txt e escrever somente a linha na qual a gente quer. só que para juntar tudo no excel foi necessário criar uma chave no arquivo a onde eu delimitei o inicio da chave e o final da chave "essa chave seria o cnpj que consta na linha 2100 do arquivo .txt que a gente recebe".

 

O programa está perfeito e lendo normalmente até esse novo arquivo que recebemos, onde quando o programa ler a chave para armazenar em uma STRING ele não reconhece o espaço vazio no .txt e da erro parando todo o processo.

 

O PROBLEMA: quando o arquivo nas 2 posições finais não contem campo ele é vazio no .TXT a minha variavel STRING da erro.

 

OBS: ESSE PROBLEMA ESTA DANDO NA PARTE DA DEFIS

 

Segue meu código:

 

< #include <iostream>
#include <fstream>
#include <locale>

using namespace std;

Declan(){
    
    
    ifstream arquivo;
    ofstream arquivox2;
    ofstream arquivox3;
    ofstream arquivox4;
    ofstream arquivox5;
    ofstream arquivox6;
    
    arquivo.open("Declan.txt"); // abre arquivo p leitura
    arquivox2.open("arquivox2.txt"); // abre arquivo p escrita
    arquivox3.open("arquivox3.txt"); // abre arquivo p escrita
    arquivox4.open("arquivox4.txt");// abre arquivo p escrita
    arquivox5.open("arquivox5.txt");// abre arquivo p escrita
    arquivox6.open("arquivox6.txt");// abre arquivo p escrita
    
    string linha;
    string ins;
        
    if (arquivo.is_open() && arquivox2.is_open() && arquivox3.is_open() && arquivox4.is_open() && arquivox5.is_open() && arquivox6.is_open())
    {
        while (getline(arquivo,linha)) 
        {
            cout<< linha;
            
        if (linha.at(0) == '2')
        {    
        
                
                ins = linha.at(2);
                ins = ins + linha.at(3);
                ins = ins + linha.at(4);
                ins = ins + linha.at(5);
                ins = ins + linha.at(6);
                ins = ins + linha.at(7);
                ins = ins + linha.at(8);
                ins = ins + linha.at(9);
                ins = ins + linha.at(10);

                    
        arquivox2 << linha <<endl; 
            
        }
        
        if (linha.at(0) == '3')
        {
            
            arquivox3 << linha <<ins  <<endl;
            
        }
        
        if (linha.at(0) == '4')
        {
            
            arquivox4 << linha <<ins  <<endl;
            
        }
        
        if (linha.at(0) == '5')
        {
            
            arquivox5 << linha <<ins  <<endl;
            
        }
    
        if (linha.at(0) == '6')
        {
            
            arquivox6 << linha <<ins  <<endl;
            
        }
        
        
        }
        
    }

}

 

Defis(){
    
    ifstream arquivo1;
    ofstream arquivox2;
    ofstream arquivox3;
    ofstream arquivox4;
    ofstream arquivox5;
    ofstream arquivox6;
    ofstream arquivox7;
    ofstream arquivox8;
    ofstream arquivox9;
    ofstream arquivoxx;
    ofstream arquivoxx1;
    
    string linha;
    string ins;    
    
        
    arquivo1.open("Defis.txt"); // abre arquivo p leitura
    arquivox3.open("arquivo2100.txt"); // abre arquivo p escrita
    arquivox4.open("arquivox2110.txt"); // abre arquivo p escrita
    arquivox5.open("arquivox2120.txt"); // abre arquivo p escrita
    arquivox6.open("arquivox2121.txt"); // abre arquivo p escrita
    arquivox7.open("arquivox2122.txt"); // abre arquivo p escrita
    arquivox8.open("arquivox2130.txt"); // abre arquivo p escrita
    arquivox9.open("arquivox2200.txt"); // abre arquivo p escrita
    arquivoxx.open("arquivox2999.txt"); // abre arquivo p escrita
    
    
    if (arquivo1.is_open() && arquivox3.is_open()  && arquivox4.is_open() && arquivox5.is_open() && arquivox6.is_open() && arquivox7.is_open()  && arquivox8.is_open() && arquivox9.is_open() && arquivoxx.is_open())  
    {
        while (getline(arquivo1,linha)) 
        {
            cout<< linha <<endl;
        
                    
            if(linha.at(0) == '2' && linha.at(1) == '1' && linha.at(2) == '0' && linha.at(3) == '0')
            {
                ins = linha.at(4);
                ins = ins + linha.at(5);
                ins = ins + linha.at(6);
                ins = ins + linha.at(7);
                ins = ins + linha.at(8);
                ins = ins + linha.at(9);
                ins = ins + linha.at(10);
                ins = ins + linha.at(11);
                ins = ins + linha.at(12);
                ins = ins + linha.at(13);
                ins = ins + linha.at(14);
                ins = ins + linha.at(15);
                ins = ins + linha.at(16);
                ins = ins + linha.at(17);
                ins = ins + linha.at(18);
            
                                
                arquivox3 << linha <<endl;
            }
            if(linha.at(0) == '2' && linha.at(1) == '1' && linha.at(2) == '1' && linha.at(3) == '0')
            {
                
                arquivox4 << linha <<ins <<endl;
            }
            if(linha.at(0) == '2' && linha.at(1) == '1' && linha.at(2) == '2' && linha.at(3) == '0')
            {
                
                arquivox5 << linha <<ins <<endl;
            }
            if(linha.at(0) == '2' && linha.at(1) == '1' && linha.at(2) == '2' && linha.at(3) == '1')
            {
                arquivox6 << linha <<ins <<endl;
            }    
            if(linha.at(0) == '2' && linha.at(1) == '1' && linha.at(2) == '2' && linha.at(3) == '2')
            {
            
                arquivox7 << linha <<ins  <<endl;
            }
            if(linha.at(0) == '2' && linha.at(1) == '1' && linha.at(2) == '3' && linha.at(3) == '0')
            
            {
                
                arquivox8 << linha <<ins <<endl;
            }
        
            if(linha.at(0) == '2' && linha.at(1) == '2' && linha.at(2) == '0' && linha.at(3) == '0')
            
            {
                
                arquivox9 << linha <<ins <<endl;
            }
            if(linha.at(0) == '2' && linha.at(1) == '9' && linha.at(2) == '9' && linha.at(3) == '9')
            
            {
                
                arquivoxx << linha <<ins <<endl;
            }
        }
        
        }
    
    
    
}


    
int main() {

    setlocale(LC_ALL, "Portuguese");
    
    int dados;
    
    while(dados != 3)
    {
    
        cout<<"\t\t\t >>>>>>>>BEM VINDO<<<<<<<<";
        cout<<"\n\n\n\n(1) Declan";
        cout<<"\n(2) Defis";
        cout<<"\n(3) Sair";
        cout<<"\n\n\nEscolha uma opção: ";
        cin>>dados;
    

        switch(dados)
        {
            case 1: 
                cout<<"\n\n\n\t\t>>>>>>DECLAN<<<<<<<"<<endl<<endl<<endl;
                system("pause");
                Declan();
                system("pause");
                system ("cls");
                return main();
            break;
        
            case 2:
                cout<<"\n\n\n\t\t>>>>>>DEFIS<<<<<<<"<<endl<<endl<<endl;
                system("pause");
                Defis();
                system("pause");
                system("cls");
                return main();
            break;
        }
    }
return 0;    
}

>

Postado

Vejamos se entendi, se as posições 17 e 18 estiverem em branco, o programa dá erro?

 if(linha.at(0) == '2' && linha.at(1) == '1' && linha.at(2) == '0' && linha.at(3) == '0')
            {
                ins = linha.at(4);
                ins = ins + linha.at(5);
                ins = ins + linha.at(6);
                ins = ins + linha.at(7);
                ins = ins + linha.at(8);
                ins = ins + linha.at(9);
                ins = ins + linha.at(10);
                ins = ins + linha.at(11);
                ins = ins + linha.at(12);
                ins = ins + linha.at(13);
                ins = ins + linha.at(14);
                ins = ins + linha.at(15);
                ins = ins + linha.at(16);
                ins = ins + linha.at(17); // se nao tiver esses dois ultimos da erro?
                ins = ins + linha.at(18); // se nao tiver esses dois ultimos da erro?

É esse o problema? Se for isso, tenta assim:

if(linha.at(0) == '2' && linha.at(1) == '1' && linha.at(2) == '0' && linha.at(3) == '0')
{
  ins = linha.substr(4);
  arquivox3 << linha <<endl;
}

                

 

Postado

@Flávio Pedroza esse negocio que você passou eu tentei e mesmo assim dá erro, o problema que o meu programa ler mais de 700 milhoes de linhas eae quando ele chega na linha 200 milhoes por exemplo ele encontra assim

 

2100|997852000189|

o programa da uma mensagem de erro fala que não tem nada após o |

 

adicionado 0 minutos depois
Em 08/07/2019 às 17:34, vangodp disse:

Pode mandar os arquivos para provas?

Posso sim

 

adicionado 8 minutos depois

@vangodp  esse arquivo é uma amostra, se quiser o original eu envio por e-mail qualquer coisa

exemplo.txt

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!