Ler e escrever Arquivos

1. Ler e escrever Arquivos

Alisson Domingos
USER01

(usa Ubuntu)

Enviado em 29/08/2017 - 19:22h

Faça um programa que leia um arquivo de texto com nome "entrada.txt", este

arquivo conterá 2 datas, uma em cada linha

as datas estarão escritas no formato dia/mes/ano
dia = 2 dígitos
mes = 2 dígitos
ano = 4 dígitos

seu objetivo é escrever estas datas em um arquivo de texto com nome

"saida.txt" em ordem crescente



Código:
#include <iostream>
#include <fstream>

#define MAXCARACTERES 10

using namespace std;

int main () {

FILE * arquivo;
arquivo = fopen("entrada.txt","r");

if(arquivo == NULL){
cout<<("Data INVALIDA!\n");
}

char frase[MAXCARACTERES];

while(fgets(frase,MAXCARACTERES,arquivo) != NULL){

}
}

nesse caso ele só lê o txt, não sei como ordená-las e escrever elas em outro documento.
se alguém puder me ajudar.


  


2. Re: Ler e escrever Arquivos

???
gokernel

(usa Linux Mint)

Enviado em 29/08/2017 - 21:12h

Olá !


Já ajudando:


01: Para melhorar a leitura do seu código usar a tags code assim, OBS sem espaços:
[ code ]
// seu código aqui ...
[ /code ]

02: Para escrever em arquivo veja algo sobre( no google ):
fputc = excreve uma letra.
fputs = escreve um "string".
fprintf = um "printf" enviando para o arquivo.



3. Re: Ler e escrever Arquivos

Fernando
phoemur

(usa Debian)

Enviado em 01/09/2017 - 19:08h

Você inclui iostream e fstream dizendo que vai utilizar iostreams do C++ e vai utilizando fopen fput fgets etc que é mais consistente com C puro.
Não que não dê certo, mas a consistência e coerência é muito importante para quem está lendo o código.
Dito isso, existem zilhões de maneiras de fazer isso, usando regex, strings, classes de datas, boost_date_time, etc... cada uma com suas vantagens e desvantagens. Aqui eu fiz assim:

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

// struct representando uma data
struct Data {
int dia;
int mes;
int ano;
char separator = '/';

};

// para ler do arquivo
ifstream& operator>>(ifstream& is, Data& dt)
{
char ch1, ch2;
is >> dt.dia >> ch1 >> dt.mes >> ch2 >> dt.ano;
if (ch1 != dt.separator || ch2 != dt.separator)
is.clear(ios::failbit);

return is;
}

// para ordenar os resultados
struct sort_struct {
bool operator()(const Data& ldata, const Data& rdata) {
if (ldata.ano == rdata.ano) {
if (ldata.mes == rdata.mes) {
return ldata.dia < rdata.dia;
}else return ldata.mes < rdata.mes;
}else return ldata.ano < rdata.ano;
}
};


int main()
{
vector<Data> my_vector (0);
ifstream myfile {"entrada.txt", ios::in};
if (!myfile.is_open())
throw runtime_error("Falha ao abrir arquivo de entrada");

ofstream myoutput {"saida.txt", ios::out | ios::trunc };
if (!myoutput.is_open())
throw runtime_error("Falha ao abrir arquivo de saida");

for (Data dt; myfile >> dt;)
my_vector.push_back(dt);

sort(my_vector.begin(), my_vector.end(), sort_struct());

for (Data& d: my_vector) {
myoutput << d.dia << d.separator << d.mes << d.separator << d.ano << endl;
}

return 0;
}


entrada.txt

14/09/1979
25/12/2014
28/12/2012
03/09/2011
11/01/2007


saida.txt

14/9/1979
11/1/2007
3/9/2011
28/12/2012
25/12/2014







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts