Jump to content
Matheus Rocha

Como tratar os dados de um arquivo .txt

Recommended Posts

Galera bom dia !

Me chamo matheus e estou com muita dificuldade na solução de um algorítimo que foi imposto e designado para eu solucionar.

O que acontece, Eu tenho um arquivo .txt onde ele tem diversas informações.

Ex Real:

1201604/08/2017 11:37:31Todas                                   MTTT T06/07/201703/08/2017000000000000000000000000000000                                                  
2ANGRA DOS REIS                   0000000014
385178911J39164256000170VIA SAT COMERCIAL ELETRONICA LTDA ME                            NNS07/07/2017 08:28:33 DN          NNNNNNN000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000       000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000S
5SSSSN000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000
6                                                                JOSÉ JORGE MARQUES                                              24  33652762SIDNEI COSTA VIEIRA                                             24  33652762
383067241J29355260000242TRIUNFO LOGISTICA LTDA                                          NNS17/07/2017 16:20:05 DN          NNNNNNN000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000       000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000S
5NNSNN000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000
6                        wilson@wleme.com                        JORGE RODRIGUES DA SILVA                                        21  21788800WILSON ROBERTO LEME                                             21  21788800
378884096J11112293000204VALE DO CAFE AUTO POSTO LTDA                                    NRS17/07/2017 16:22:44 DN          SNSNNNN000000558482002000000000000000000000000000000000000914863662000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000558482002000000914863662000000000000000000000000000000000000000000000000000000000000000000000711192000000000000000000000000000000000000000000000000000355670468       000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000355670468S
4N00037000000000711192
5NNNNN000000087369776000000000000000000000000000000000000000000000N000000083505478000000000000000000000000000000000000000000000N000000074110649000000000000000000000000000000000000000000000N000000075302716000000000000000000000000000000000000000000000N000000068143708000000000000000000000000000000000000000000000N000000067633557000000000000000000000000000000000000000000000N000000074329043000000000000000000000000000000000000000000000N000000077872727000000000000000000000000000000000000000000000N000000075293488000000000000000000000000000000000000000000000N000000078980667000000000000000000000000000000000000000000000N000000063227581000000000000000000000000000000000000000000000N000000088383080000000000000000000000000000000000000000000000
6                                                                HAROLDO DA SILVA MANCEBO                                        24  24534614DANIEL MARIA DINIZ                                              24  24533886
385454455J00468285000190TRANZIRAN TRANSPORTES LTDA                                      NRS19/07/2017 11:01:58 DN          SNNSNNN000029414831790000000701696111000000000000000000044743461671000001941418951000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030116527901000046684880622000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040394000000001040394       000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040394N
4N00026000000001040394
379050008J11921635000148GB segurança ELETRONICA DE ANGRA LTDA                           NNS20/07/2017 16:17:50 DN          NNNNNNN000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000       000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000S
5SSSSN000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000N000000000000000000000000000000000000000000000000000000000000

o mesmo quer que eu faça um programa para ler esse conteúdo do arquivo txt a cima linha por linha e formate o mesmo gravando em um outro txt mas o formato é linha continua até o 2 que é o primeiro caractere


 

Resumindo é um programa para eu pegar um arquivo já pronto e transformar ele como demonstrado a cima salvando em outro txt. Só que estou encontrando muitas dificuldades pra isso, eu consigo ler o arquivo e criar o local de salvamento com os dados, só que na formatação não consigo jogar a lógica na qual consiste em: O programa tem que na primeira linha identificar que é 2 sempre que tiver 2 no inicio da linha ele vai dar uma quebra de linha e continuar escrevendo até encontrar novamente o 2 no inicio da linha. 

 

OBS: o meu programa ta 100% funcional até então, mas eu não consigo jogar uma logica para o citado a cima. ele ler e grava em outro arquivo como já está em linha continua. só tenho que criar uma logica para poder fazer ele ter quebra de linha sempre que o caractere o primeiro caractere da linha for 2.

 

MEU CÓDIGO: 

 

#include <iostream>
#include <fstream>
#include <locale>
using namespace std;

int main() {

    setlocale(LC_ALL, "Portuguese");

    ifstream arquivo;
    ofstream arquivox;
    string linha;

    arquivo.open("Declan.txt"); // abre arquivo p leitura
    arquivox.open("Teste.txt"); // abre arquivo p escrita

    if (arquivo.is_open() && arquivox.is_open()) {
        while (getline(arquivo, linha)) {
            cout << linha; // lê o arquivo linha a linha
            arquivox << linha; // escreve no arquivo 
            system("pause");
        }
        arquivo.close();
        arquivox.close();
    } else {
        cout << "Não foi possivel abrir o arquivo" << endl;
    }

    return 0;
}


return 0;

}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By picsartisticc
      Meu professor passou uma prova pra casa para entregar na sexta feira e eu ainda não tive tempo de fazer nada e ainda tenho mais outra prova no mesmo dia. E definitivamente icc não tá como prioridade.
      Alguém pode pelo amooor me ajudar? 
      porque assim, máximo respeito pelos programadores viu? É muita paciência que vocês tem!
      1. Ele pede pra implementar um programa que tenha funções de soma, subtração, multiplicação e divisão que opere 2 números e retorne a sua respectiva operação.
      2. Implementar uma função que receba a quantidade de faltas no trabalho e retorne o salario mensal de um funcionario, cuja diaria é 100,00 de acordo com o numero de dias trabalhados.
      Tem essa formula aqui:
      dias_trabalhados=30-falta_no_mes
      salario_mensal=dias_trabalhadosx100
      3. Implantar um procedimento que receba 3 números e exiba-os em ordem crescente.

      Desde já muita gratidão por todos que tirarem um tempinho do tempo pra me salvar. Att.
    • By Lísias de Castro
      Ola, sou Lísias e gostaria de saber se alguém poderia me ajudar nessa tarefa tão difícil para finalizar minha biblioteca.
      Eu fiz um motor de jogos, e nele já consegui implementar todas as funções básicas para um uso primário. Fazendo a criação de jogos simples através dela.
      Mas estou desenvolvendo um rpg, e resolvi fazer com que os personagens atirem a longa distância. Porém, para que isso aconteça, tenho que fazer com que o objeto a ser atirado sempre corra em linha reta.
      Criei uma função que faz com que todos os objetos se movam na tela, mas ela não funciona de uma maneira linear. O que posso modificar nessa função para que ela me proporcione isso?
       
      static STATUS place_user_move(OBJECT_SET * U, BP32 x, BP32 y) { if (U == NULL)return (Off); if (U->x_route == x) { if (U->y_route > y) { U->y_route -= U->y_speed; U->where_stop_but(U, NORTH); if (U->y_route < y) { U->y_route = y; U->where_stop(U); return (On); } } if (U->y_route < y) { U->y_route += U->y_speed; U->where_stop_but(U, SOUTH); if (U->y_route > y) { U->where_stop(U); U->y_route = y; return (On); } } return (Off); } if (U->y_route == y) { if (U->x_route > x) { U->x_route -= U->x_speed; U->where_stop_but(U, WEST); if (U->x_route < x) { U->where_stop(U); U->x_route = x; return (On); } } if (U->x_route < x) { U->x_route += U->x_speed; U->where_stop_but(U, EAST); if (U->x_route > x) { U->where_stop(U); U->x_route = x; return (On); } } return (Off); } if (U->x_route > x) { U->x_route -= U->x_speed; if (U->x_route < x)U->x_route = x; if (U->y_route > y) { U->y_route -= U->y_speed; U->where_stop_but_and(U, NORTH, WEST); if (U->y_route < y)U->y_route = y; } if (U->y_route < y) { U->where_stop_but_and(U, SOUTH, WEST); U->y_route += U->y_speed; } } if (U->x_route < x) { U->x_route += U->x_speed; if (U->x_route > x)U->x_route = x; if (U->y_route < y) { U->y_route += U->y_speed; U->where_stop_but_and(U, SOUTH, EAST); if (U->y_route > y)U->y_route = y; } if (U->y_route > y) { U->y_route -= U->y_speed; U->where_stop_but_and(U, NORTH, EAST); if (U->y_route < y)U->y_route = y; } } return (Off); } PLACE_CALL STATUS PLACE_TYPE place_user_route(CHAINED * user, BP32 x, BP32 y) { if (user && USER_C(user->it)->object && bit_is_on(USER_C(user->it)->object->status, OBJECT_VISIBLE)) { OBJECT_SET * U = USER_C(user->it)->object; if (U->x_route == x && U->y_route == y) { obj_where_stop_all(U); return (On); } //printf("xs %f ys %f\n",object->x_speed,object->y_speed); return (place_user_move(U, x, y)); } return (Off); } #define sign(x) ((x > 0) ? 1 : ((x < 0) ? -1 : 0) ) PLACE_CALL STATUS PLACE_TYPE place_user_straight(CHAINED * user, BP32 x1, BP32 y1) { if (user && USER_C(user->it)->object && bit_is_on(USER_C(user->it)->object->status, OBJECT_VISIBLE)) { OBJECT_SET * O = USER_C(user->it)->object; BP32 dx, dy; dx = x1 - O->x_route; dy = y1 - O->y_route; static BP32 x = -1, y = -1, p = -1; if (x == -1)x = O->x_route; if (y == -1)y = O->y_route; if (p == -1)p = 2 * dy - dx; printf("x %lf y %lf\n", x, y); if (x < x1) { if (p >= 0) { y = y + 1; p = p + 2 * dy - 2 * dx; } else { p = p + 2 * dy; } x = x + 1; } else { O->x_route = x; O->y_route = y; x = -1; y = -1; p = -1; return (On); } O->x_route = x; O->y_route = y; x = -1; y = -1; p = -1; } return (Off); } a função user_place_straight foi minha tentativa de implementar bresenham que promete fazer o que estou tentando.
       
      Isso é o que fá fiz com o motor: https://www.youtube.com/watch?v=nuLi_lB6c4Y&feature=youtu.be
       
      Mas até agora não estou conseguindo resultado
    • By SGTFalcao
      Boa noite, 
       
      Preciso de ajuda com o desenvolvimento de um programa. 
       
      Quero saber 3 coisas .
       
      1 - Criei uma  vetor de struct vinculada a uma constante de valor 5. Quero saber como faço para limitar o cadastro ao tamanho da constante ( controla o n° de posições do vetor da struct)
       
      De forma que ao cadastrar 5 livros ele impeça de cadastrar o sexto. 
       
      2- Impedir que dos 5 cadastros algum deles se repita. (Livros iguais)
       
       
       
      3- Se eu der o comando para exibir a lista de dados cadastrados e não houver nenhum ele tem que informar lista vazia. 
       
       
       
       
       
      Segue o meu código. 
       
      #include<stdio.h>
      #include<stdlib.h>
      #include<string.h>
      #define Max_livros 5
      struct biblio{
          char nomeobra[30];
          char nomeedit[30];
          char nomeaut[30];
          int codigo;
          int ativo;
      };
      biblio livros[Max_livros];
      void menu();
      void cadastrar();
      void mostrar();
      // Menu principal -------------------------INICIO-------------------------------
      int main(){
          menu();
          return 0;
      }
      // -----------------------------------------FIM---------------------------------
      void menu(){
          int op;    
          do{
          system("cls");
          printf("---------->>Sistema para bibliotecas<<----------\n \n \n ");
          printf("\n1 - Inserir um novo cadastro: ");
          printf("\n2 - Mostrar todos os cadastros: ");
          printf("\n0 - Encerrar \n\n");
          printf("Opcao escolhida: ");
          scanf("%d",&op);
          getchar();
          fflush(stdin);
          switch(op){
              case 1:
                   cadastrar();
              break;
              case 2:
                  mostrar();
              break;
              default : 
                  system("cls");
                  printf("\n \n ==========================================");
                  printf("\n\n\n\n\t Erro : opcao invalida!!!\n\n\n\n");
                  printf("\n \n ==========================================\n\n");
                  system("pause");
          }
          getchar();
          }while(op!=0);
                  }            
      void cadastrar(){
          
          system("cls");    
          char nomeobra[20];
          char nomeedit[20];
          char nomeaut[20];
          int codigo;
          int op;
          do{    
              codigo=0;
              codigo=codigo+1;
              printf("\nDigite o nome da obra: ");
              fgets(nomeobra,sizeof(nomeobra),stdin);
                  
              
              printf("\nDigite o(s) nome(s) d(os) autor(es): ");
              fgets(nomeaut,sizeof(nomeaut),stdin);
              
              
              printf("\nDigite o nome da editora: ");
              fgets(nomeedit,sizeof(nomeedit),stdin);
              
              for(int i=0;i<Max_livros;i++){
                  if(livros.ativo==0)
                  {
                      strcpy(livros.nomeobra,nomeobra);
                      strcpy(livros.nomeaut,nomeaut);
                      strcpy(livros.nomeedit,nomeedit);
                      livros.ativo=1;
                      break;
                  }
              }
              printf("\n1 - Continuar \n0 - Sair \n\n");
              scanf("%d",&op);
                  getchar();
                  fflush(stdin);            
          }while(op!=0);
          }
          
          
      void mostrar(){
          int codigo=0;
          system("cls");
          printf("------------->>Lista de livros cadastrados<<-------------\n \n \n");
          for(int i=0;i<Max_livros;i++){
              if(livros.ativo==1){        
                  codigo=codigo+1;
              printf("\nCodigo: %d\n",codigo);
              printf("\nNome da Obra: %s\n",livros.nomeobra);
              printf("\nNome do(s) autor(es): %s\n",livros.nomeaut);
              printf("\nNome da editora: %s\n",livros.nomeedit);
              printf("\n\n--------------------------------\n\n");
              }
          }
          printf("\n\nPressione '0' para voltar ao menu...");
          getchar();
          fflush(stdin);

    • By Luis011
      Estou tentando fazer um programa para cadastro de clientes, para o aprendizado apenas, estou com um erro que nao consigo resolver, cadastro algumas pessoas mas na hora de fazer a pesquisa desses cadastros eu coloco o cpf de uma e aparece as informacoes da proxima pessoa na fila de arrays. E quando tento pesquisar alguma pessoa que nao esteja no array 0 cai no else CPF INVALIDO, 
      Ai vai o codigo: 
      #include <iostream>
      #include <cstdio>
      #include <cstdlib>
      #include <cstring>
      char nome[50] [50];
       char email[50] [50];
       int cpf[50];
       int op;
       int i = 0;
       int a;
      int cpfpesquisa;
      char emailpesquisa[50];
      using namespace std;
      void pesquisa ();
      void cadastro();
      int main()
      {
          do{
          cadastro();
          pesquisa();
          }while(op == 2);
      system ("PAUSE");
      return 0;
      }
      void cadastro() {
       do{cout << "-----CADASTRO-----" << endl << endl;
       cout << "NOME: " ;
       cin >> nome;
       cout << endl <<"EMAIL: ";
       cin >> email;
       cout << endl << "CPF: ";
       cin >> cpf;
       cout << endl << "PARA CONTINUAR CADASTRANDO DIGITE 1";
       cin >> op;
       i++;
       }while(op == 1);
      }
      void pesquisa () {
      do{
      cout << "DIGITE 1 PARA PESQUISAR POR CPF E 2 PRA PESQUISAR POR EMAIL ";
      cin >> op;
      switch(op)
      {
          case 1: cout << "DIGITE O CPF: ";
                  cin >> cpfpesquisa;
                  for(a=0;a<50;a++) {
                      if(cpfpesquisa == cpf[a])
                      {cout << "NOME: " << nome[a] << endl << "EMAIL: " << email[a] << endl;
                  break;}
                  else{
                      cout << "CPF INVALIDO!"; }break;}break;

          case 2: cout << "DIGITE O EMAIL: ";
                  cin >> emailpesquisa;
                  for(a=0;a<50;a++){
                          if (strcmp( emailpesquisa,email[a]))
                          {
                              cout << "NOME: " << nome[a] << endl << "CPF: " << cpf[a] << endl;
                          break;}
                  }

      }
      cout << endl << "PARA CONTINUAR A PESQUISAR DIGITE 1" << endl << "PARA VOLTAR A CADASTRAR DIGITE 2 ";
      cin >> op;
      }while (op ==1);
      }
       
    • By No(-)me
      OBJETIVO: Ler strings armazenando em campos de uma struct, atendendo à necessidade/interesse de não ler o que resta no buffer na próxima entrada (lendo espaços e quantidade de chars pré definidos)
       
      O QUE PESQUISEI: Tudo que pude, tentei( E TESTEI!) várias formatações com scanf, li e entendi o que fui capaz (lendo em todo lugar) sobre sscanf, fgets, estruturas de repetição recebendo strings de char em char, função criada para o último método citado, setbuf, setvbuf, bufsize e muito mais acredite, vou até passar na biblioteca estadual amanhã para ver se tem algum livro de C e pesquisar mais. (ISTO SÓ PRA DEIXAR CLARO PRA COMUNIDADE que não sou preguiçoso visto que essa é minha primeira pergunta num fórum na história - todo e qualquer tipo de fórum - porque existe uma pressão muito grande sobre fazer perguntas num fórum de programação em especial)
       
      Até que achei um jeito sem ser o famigerado fflush, o rewind (stdin)...
      *Reafirmo! Estou ciente de getchar em estrutura de repetição ou fgets por exemplo, mas só estou aqui porque não me foi útil.*
       
      AFINAL qual o problema de usar a função rewind para o fluxo stdin?
      Claro, é mais usual para chamar ponteiro de arquivo em leitura, mas isso é  motivo suficiente para ser ruim usar em stdin? Qual o problema real de se aplicar no fluxo stdin? Não é portável? Achei até uma doc da microsoft indicando para isto: https://docs.microsoft.com/pt-br/cpp/c-runtime-library/reference/rewind?view=vs-2019 em que há "...Para limpar o buffer de teclado, use rewind com o fluxo stdin, que está associado com o teclado por padrão...".
       
      Vi reprovação por meio de usuários de outros fóruns nos quais achei perguntas parecidas como esta mas não achei as explicações de como isto ser ruim muito convincentes (um pouco presunçoso ou dedutivo da minha parte por ser um mero iniciante).
      O que acham? Eu só tenho 3 meses que conheço a programação em geral.
       
      SITUAÇÃO ATUAL: Olha, já que isto é para um trabalho de ADS EAD em que a faculdade ensina com 'fflush stdin' sem problemas, e já que ainda não achei alternativa também totalmente resoluta e confiável, está assim com o fflush stdin  GENTE DESCULPE QUALQUER INCONVENIENTE.
      #include <stdio.h> #include <stdlib.h> #include <locale.h> typedef struct cadastro{ char nLivro[31]; char nAutores[31]; char nEditora[31]; int cod; }livro; int main(){ setlocale (LC_ALL, ""); livro estante[4]; int op, i, j; i = 1; j = 1; do { printf ("\t> Menu <\n\n1 - > Efetua um novo cadastro\n\n2 - > Visualiza todos cadastros\n\n0 - > Sai do menu\n\n"); scanf ("%1d%*c", &op); fflush (stdin); switch (op){ case 1 :if (i < 6){ printf ("\t> Efetua um novo cadastro\n\n> Nome da obra: "); scanf ("%30[^\n]", estante[i-1].nLivro);//não é necessário 's' nesta ocasião. printf ("\n> Autor(es): "); fflush (stdin);//ou rewind(stdin). scanf ("%30[^\n]", estante[i-1].nAutores); fflush (stdin); printf ("\n> Editora: "); scanf ("%30[^\n]", estante[i-1].nEditora); fflush (stdin); printf ("\n\n\t>Cadastro bem sucedido!"); estante[i-1].cod = i; i++; }else { printf ("Cadastro lotado!"); }......(vergonha do código)  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.