http://www.4shared.com/file/p1AxJaYd/LerArquivoTexto.html
Incluso com os fontes está o arquivo .CSV que você deve colocar em uma pasta C:\Util em seu computador para que funcionem corretamente.
Em alguns momentos, aqueles provinhas práticas básicas que você faz para uma vaga em empresa podem requerer bem mais tempo que as quatro horas definidas para toda a aplicação da parte téórica e prática.
Nesta manhã, tive o desprazer de cruzar com uma dessas. Vou postar aqui o código da bendita, que realmente é interessante de ser gerado e que está em C#.NET.
Tínhamos a opção de dar esta solução em Delphi 7 ou C#.Net. Como a máquina em que peguei o Delphi 7 estava com uns erros horríveis, eu até "iniciei" este projetinho, mas acabei me estressando e achando a coisa enjoada de fazer.
Pois bem!
Desenvolvedor que é desenvolvedor deixa algumas respostas para tudo. Eis aqui o código total em C#.Net, porque fiquei com comichão de finalizar o bendito!!
E não é que ia mesmo levar um tempo bom fazendo o bicho!!???
Vamos ao código!!
O arquivo CSV fornecido tinha uma estrutura parecida com esta:12345;12072010;142300;8980090
12345;12072010;142400;8980091
12345;12072010;152700;8980092
12345;12072010;182300;8980093
12345;12072010;192300;8980094
12345;12072010;232300;8980095
12345;12072010;072300;8980096
12346;12072010;102300;8980097
12346;14072010;114500;8980098
12346;14072010;123300;8980099
12346;14072010;120100;8980100
12346;14072010;061300;8980101
12346;14072010;064300;8980102
Os campos na ordem devem ser (segundo me recordo):
código do cliente;data;hora;código de pedido
O aplicativo deve gerar um arquivo-texto deste csv inicial fornecido com os pedidos dos clientes feito a cada hora.
Ou seja, você deve sumarizar no arquivo-texto a ser gerado os pedidos de cada cliente a cada hora do dia.
Iniciei um novo projeto no C#.Net.
Dê a ele o nome de LerArquivoTexto.
Vamos precisar de um TextBox, três botões e um OpenDialog que nomeei como OpTexto. Insira-os todos em seu form.
Ao clicar no botão com " ... " o aplicativo deverá ler o diretório inicial configurado no OpenDialog (nada impedindo que o usuário possa selecionar outro local). No caso específico e conforme a figura abaixo, configurei o aplicativo para abrir no C:\Util.
O código do botão ... fica assim:
private void button3_Click(object sender, EventArgs e)
{
this.opTexto.FileName = "";
this.opTexto.RestoreDirectory = true;// para não mudar o diretório da aplicação definido no inicio
this.opTexto.Filter = "Arquivos CSV*.csv";
if (this.opTexto.ShowDialog () == DialogResult.OK)
{
this.txtArquivo.Text = this.opTexto.FileName.ToString();
}
}
O caminho do arquivo-texto será preenchido no textbox, conforme mostrado na figura abaixo:
Após clicar no botão Processar, os dados serão gerados. A leitura de dados será realizada através de um stremreader:
private void button1_Click(object sender, EventArgs e)
{
StreamReader sr = new StreamReader(txtArquivo.Text);
string HoraPedido = "";
string NoCliente= "";
string NoClienteInicial = "";
int sLinhas = 0;
int SomaPedido00 = 0 ; // variáveis para a soma dos pedidos a mensurar
int SomaPedido01 = 0;
int SomaPedido02 = 0;
int SomaPedido03 = 0;
int SomaPedido04 = 0;
....
A abertura de um arquivo-texto será necessária para gerar os dados dos pedidos de cada cliente do arquivo csv para um arquivo-texto com os dados sumarizados:
// Gravar no arquivo-texto os dados gerados para este cliente
StreamWriter valor = new StreamWriter("C:\\Util\\clientes.txt", true, Encoding.ASCII);
if (File.Exists(txtArquivo.Text))
{
using (StreamReader fluxotexto = new StreamReader(txtArquivo.Text))
while (true)
{
string linhatexto = fluxotexto.ReadLine();
sLinhas = sLinhas + 1;
if (linhatexto == null)
{
break;
}
if (linhatexto != "")
{
// Ler os dados do cliente
NoCliente = linhatexto.Substring(0, 5);
if (sLinhas == 2)
{
NoClienteInicial = NoCliente;
}
RefazerNovoCliente:
// faz a somatória de pedidos enquanto for o mesmo código de cliente...
if (NoClienteInicial == linhatexto.Substring(0, 5))
{
//obter a soma de todos os possíveis registros em casa horário
//simplesmente abstraia a hora de cada registro
HoraPedido = linhatexto.Substring(15, 2);
if (HoraPedido == "00")
{
SomaPedido00 = SomaPedido00 + 1;
}
if (HoraPedido == "01")
{
SomaPedido01 = SomaPedido01 + 1;
}
if (HoraPedido == "02")
{
SomaPedido02 = SomaPedido02 + 1;
}
if (HoraPedido == "03")
{
SomaPedido03 = SomaPedido03 + 1;
}
if (HoraPedido == "04")
{
SomaPedido04 = SomaPedido04 + 1;
}
Cada Pedido será devidamente catalogado e somado de acordo com o cliente encontrado.
Se o número do cliente mudar, o comando else será acionado, fazendo a gravação em arquivo-texto dos dados do cliente atual e seus pedidos hora a hora:
} // fechamento do if do cliente
else
{
valor.WriteLine("Cliente: " + Convert.ToString(NoClienteInicial));
//valor.Write (Convert.ToString(NoClienteInicial));
valor.WriteLine("Hora 00: " + Convert.ToString (SomaPedido00));
valor.WriteLine("Hora 01: " + Convert.ToString (SomaPedido01));
valor.WriteLine("Hora 02: " + Convert.ToString (SomaPedido02));
valor.WriteLine("Hora 03: " + Convert.ToString (SomaPedido03));
valor.WriteLine("Hora 04: " + Convert.ToString (SomaPedido04));
....
O arquivo-texto será fechado, a variável clienteinicial receberá o valor do cliente atual e o aplicativo deverá refazer as contagens para o novo cliente, zerando os contadores criados inicialmente. Em seguida, o processamento deverá ser retomando para a análise da linha do novo pedido a ser contado:
valor.Close();
NoClienteInicial = NoCliente;
//zerar as variáveis de soma
SomaPedido00 = 0;
SomaPedido01 = 0;
SomaPedido02 = 0;
SomaPedido03 = 0;
SomaPedido04 = 0;
...
//reavaliar a linha para o novo cliente
goto RefazerNovoCliente;
Conforme abaixo, após clicar no messagebox, o arquivo-texto será aberto no notepad, pela linha de comando:
MessageBox.Show ("Arquivo-Texto criado com sucesso!!");
// Abrir o arquivo-texrto gerado na sequencia
System.Diagnostics.Process.Start(@"C:\util\clientes.txt");
Algumas ressalvas:
1. O código compartilhado no link trabalha somente com os dados do arquivo csv aqui informado. O da prova era bem mais complexo e com certeza outros acertos seriam necessários no código para um bom funcionamento
2. O arquivo .rar não estará disponível para download por muito tempo, então aproveitem para baixar um exemplo prático de arquivo-texto em C#.Net
No mais, sorte a todos e valeu, professor Werley, pela chance de exercitar os conhecimentos!
Que seu novo desenvolver dê conta do recado...
Fui!!
Um comentário:
Só acho ruim, por questões de boas práticas o while(true).
poderia fazer
while((linhatexto = fluxotexto.ReadLine()) != null)
{
/codigo
}
Postar um comentário