Arquivos de Textos no C - Básico

Transcrição

Arquivos de Textos no C - Básico
OpenStax-CNX module: m47676
1
∗
Arquivos de Textos no C - Básico
Joao Carlos Ferreira dos Santos
This work is produced by OpenStax-CNX and licensed under the
†
Creative Commons Attribution License 3.0
TRABALHANDO COM ARQUIVO DE TEXTO NO C#
Introdução
A linguagem C# foi criada pela Microsoft e faz parte do framework .NET. É uma linguagem orientada
a objetos e sua estrutura é baseada na linguagem C++, mas também tem inuência de outras linguagens
orientada a objetos. Além de ser uma linguagem de fácil aprendizagem podemos ainda contar com a praticidade dos recursos do ambiente de desenvolvimento do Visual Studio. Neste artigo, indicarei como trabalhar
com arquivos de texto no C#. Mostrarei uma prévia do conhecimento necessário para trabalhar com esses
arquivos, e criarei um programa do tipo Windows Form utilizando os recursos apresentados.
Instalando as Ferramentas de Desenvolvimento.
Para facilitar o aprendizado e ainda o desenvolvimento utilizando a linguagem C# vamos instalar a IDE
Visual Studio 2010 Express.
Essa ferramenta é gratuita e pode ser baixada no site da Microsoft.
Para
instalação do Visual Studio temos que seguir os passos listados, abaixo:
•
•
•
Primeiro: acessar o site http://www.microsoft.com/visualstudio/ptb
1
ir na guia Downloads depois;
Visual Studio 2010 Express;
depois em Visual C# 2010 Express escolher o idioma e clicar em Instalar agora.
Segundo: escolher a versão em seguida na opção
Terceiro:
Agora após a instalação do programa podemos acessá-lo em botão do Windows
Microsoft Visual Studio 2010 Express.
∗ Version
1.1: Sep 23, 2013 7:54 am -0500
† http://creativecommons.org/licenses/by/3.0/
1 http://www.microsoft.com/visualstudio/ptb
http://cnx.org/content/m47676/1.1/
Todos os Programas
OpenStax-CNX module: m47676
2
Figure 1
Nota: esse caminho para acessar o Visual Studio serve para versão do Windows 7.
Tipos de Dados
Esse tópico serve para mostrar os tipos de dados existentes na linguagem C#. O Tipo de dado em uma
linguagem de programação inuencia no tamanho que o dado ocupa na memória do computador. Qualquer
linguagem de programação trabalha com diversos tipos de dados e os mais comuns entre todas elas são:
inteiro, ponto-utuante, booleano e texto.
O C# também trabalha com esses tipos, mas vou mostrar de
forma mais especica os tipos de dados desta linguagem.
O C# trabalha com duas categorias de tipos de dados:
•
•
Valor
Referencia
Variáveis do tipo
Valor ainda tem duas subdivisões conforme mostro abaixo:
http://cnx.org/content/m47676/1.1/
OpenStax-CNX module: m47676
•
•
3
Booleanos
Numéricos
Variável de Valor - Tipo Booleano
true)
Esse tipo representa valores lógicos, ou seja, verdadeiro (
false).
ou falso (
Quando esse tipo de
variável é declarado no C#, o seu valor padrão é false ( caso não seja denido um valor pelo programador).
Variável de Valor - Tipo Numérico
Os tipos numéricos são divididos em três categorias no C# sendo eles:
• Inteiro
•
•
•
•
•
•
•
char 16 bits
long 64 bits
ulong 64 bits
sbyte 8 bits
int 32 bits
short 16 bits
ushort 16 bits
• Ponto-utuante
•
•
oat 32 bits
double 64 bits
• Decimal
•
Decimal 128 bits
Obs.: a descrição
bits representa o quanto de espaço aquele tipo de dado ocupa na memória do computador.
Referência também tem duas subdivisões sendo elas:
Variáveis do tipo
•
•
Class
String
Referência - Class
É um tipo de dado construído, ou seja, um modelo que pode conter campos, constantes e operações
próprias.
Referência string
Em C# o tipo string herda diretamente da classe de objetos e serve também para armazenar dados do
tipo texto.
É preciso sempre analisar em qual situação deve-se usar determinado tipo de dado para não ter uso inadequado da memória do computador como, por exemplo, declarar uma variável do tipo
com informações de idade. Nesse caso, o tipo
int já estaria de bom grado.
oat para trabalhar
Supondo que cada quadradinho
das imagens abaixo representa um endereço de memória e que cada um tivesse a capacidade de armazenar
até 20 bits. Se declarasse o oat para trabalhar com informações sobre idade estaría desperdiçando memória,
conforme pode-se ver nos dois quadrados
Usando o oat:
http://cnx.org/content/m47676/1.1/
OpenStax-CNX module: m47676
4
Figure 2
Usando o int:
Figure 3
Trabalhando com Vetores
Vetores são estruturas de dados onde podemos armazenar uma quantidade de um tipo especico de dados.
O tipo especicado em um vetor será armazenado em posições diferentes dele. Para car mais claro vamos
a um exemplo. Declarar um vetor que trabalhara com dados do tipo texto com no máximo cinco posições
seria assim:
string[] pessoa = new string(5);
pessoa[0] = maria;
pessoa[1] = antonio;
pessoa[2] = joao;
pessoa[3] = rodrigo;
pessoa[4] = marinho;
http://cnx.org/content/m47676/1.1/
OpenStax-CNX module: m47676
5
Figure 4
Os vetores sempre iniciam em zero, por tanto, se for declarado um vetor de cinco posições teremos na
verdade um intervalo de zero a quatro, ou seja, o tamanho de um vetor declarado será sempre sua quantidade
declarada menos um.
Conversão de Tipos no C#
No C# existem duas formas de conversão de dados que são feitas: de forma implícita e explicita.
Forma Implícita
A conversão implícita ocorre da seguinte forma: quando se declara uma variável de um tipo inteiro, por
exemplo, essa variável pode ser atribuída à outra variável de um tipo ponto-utuante e a conversão ocorre
de forma automática. Quando isso ocorre dizemos que ocorreu um
cast implícito.
No entanto, um tipo oat
não pode ser atribuído em um tipo int, isso porque um tipo oat é capaz de armazenar um volume maior de
informações que um tipo int. Portanto, não é possível essa conversão implicitamente. Outra impossibilidade
é atribuir um tipo texto a um tipo numérico. Abaixo, temos os exemplos da explicação:
A conversão implícita não ocorre:
Figure 5
A conversão implícita ocorre:
http://cnx.org/content/m47676/1.1/
OpenStax-CNX module: m47676
6
Figure 6
Forma Explicita
Em alguns casos é necessário realizar a conversão dos tipos de dados de forma explicita. Um exemplo de
conversão explicita pode ser usando um cast ou um comando de conversão. Vamos ver as duas formas:
Usando Cast
No caso do cast nós podemos converter operações simples como, por exemplo, um tipo oat para um
tipo int, mas devemos tomar cuidado com esse tipo de conversão já que podemos ter perda signicativa de
dados. Um exemplo seria ter um valor do tipo oat 34,5 e jogar para uma variável do tipo int. Provavelmente,
quando o tipo oat passada para o tipo int nós teríamos como retorno o valor 34 apenas, ou seja, perderíamos
a parte decimal do número. Fazemos um cast colocando antes do valor atribuído e entre parênteses o tipo
de dados para o qual vamos usar.
Exemplo de cast:
Figure 7
Usando Comandos
http://cnx.org/content/m47676/1.1/
OpenStax-CNX module: m47676
7
O C# disponibiliza comandos para conversão de tipos de dados através da classe
Convert.
Para usar
esse recurso basta digitar o nome Convert seguido do operador ponto e o nome do método que deseja usar.
No exemplo abaixo podemos ver a conversão de um tipo texto para o tipo numérico usando um método da
classe Convert:
Figure 8
Trabalhando com Classes
Na programação uma classe nada mais é que um modelo onde nós denimos o comportamento de um
objeto através de ações, estados e atributos.
Pela denição da estrutura da classe podemos identicar o
tipo de serviço que ela fornece. Com a criação da classe podemos dizer que criamos um novo tipo de dado.
Vamos agora trabalhar com classes na linguagem C# mostrando sua construção e o uso de seus objetos.
Imaginemos a criação de um sistema de biblioteca escolar onde teríamos o gerenciamento de reserva, entrega
e pesquisa de livros.
Certamente nesse sistema teríamos uma entidade responsável pela identicação dos
livros, ou seja, uma classe que poderíamos dar o nome de
Livro.
Após identicarmos a necessidade de
criação dessa classe teríamos que denir sua estrutura e basicamente o que podemos encontrar em um livro
seria ISBN, Autor, Editora e Paginas. Esses itens seriam os atributos da nossa classe Livro as ações seriam
métodos como reservar, consultar e devolver.
As Classes StreamReader e StreamWriter
Através dessas dessas classes podemos trabalhar com o processo de entrada/saída (input/output) de
dados em arquivos sequenciais.
StreamWriter
Com os recursos disponíveis nessa classe podemos trabalhar com a escrita de caracteres em arquivos
sequenciais. Por exemplo, para escrever a seguinte frase em um arquivo poderíamos criar o código, abaixo:
http://cnx.org/content/m47676/1.1/
OpenStax-CNX module: m47676
8
Figure 9
O código acima cria um arquivo chamado dados.txt (caso o arquivo ainda não exista) e escreve nesse
arquivo o texto Meus dados escritos no arquivo e por m fecha a conexão com o arquivo. Toda vez que esse
código for executado o texto será sobre escrito, mas para evitar que isso aconteça pode-se incluir um segundo
parâmetro no construtor da classe. Assim, o código manteria os dados já existes no arquivo e incluiria novos
sempre após o ultimo registro.
Figure 10
StreamReader
Com os recursos disponíveis nessa classe podemos realizar a leitura em arquivos sequencias. Por exemplo,
para ler o mesmo arquivo escrito no exemplo anterior poderíamos fazer o seguinte:
http://cnx.org/content/m47676/1.1/
OpenStax-CNX module: m47676
9
Figure 11
Agora, vamos por em prática os conceitos vistos criando um mini-sistema para controle de empréstimo
de livros em uma biblioteca universitária.
Nosso sistema será bem simples.
Teremos uma classe Aluno
para controle dos alunos, uma classe Livro controle dos livros e uma classe Reservas para controle do livros
emprestados.
Os dados referentes a livros, alunos e reservas serão armazenados em arquivos do tipo txt.
Precisamos criar três arquivos para utilizarmos como fonte de dados do sistema nomeados como Livros.txt,
Alunos.txt e Reservados.txt em uma pasta chamada
Temp na unidade C:.
Arquivo Alunos.txt
Figure 12
Arquivo Livros.txt
http://cnx.org/content/m47676/1.1/
OpenStax-CNX module: m47676
10
Figure 13
Arquivo Reservados.txt
Figure 14
Agora, criaremos um projeto do tipo Windows Form Application no Visual Studio.
Studio, depois vá em
Abra o Visual
File New Project em seguida, nos Templates escolha a opção Windows Form
Application e dê um nome para sua aplicação conforme a imagem abaixo:
http://cnx.org/content/m47676/1.1/
OpenStax-CNX module: m47676
11
Figure 15
Feito isso, dê o OK e o Visual Studio ira gerar o projeto. Nesse projeto nós encontramos por padrão
a classe Program.cs e um formulário nomeado como Form1, mas precisamos incluir novos objetos nesse
projetos. Primeiro, vamos incluir mais um Windows Form e nomear para frmMenu e renomear o já existente
para frmConsultar. Depois, inserir os outros objetos até que que igual a imagem abaixo:
http://cnx.org/content/m47676/1.1/
OpenStax-CNX module: m47676
12
Figure 16
Incluir também os seguintes eventos para cada um dos objetos:
Objeto frmConsular:
private void frmConsultar_Load(object sender, EventArgs e)
{
lblStatus.Text = "";
btnLivroCom.Enabled = false;
btnDevolver.Enabled = false;
btnReservar.Enabled = false;
}
Objeto txtConsuta:
private void txtConsulta_TextChanged(object sender, EventArgs e)
{
objLivro = new Livro();
string[] arrLivro = new string[objLivro.buscaLivros(txtConsulta.Text).Length];
http://cnx.org/content/m47676/1.1/
OpenStax-CNX module: m47676
13
lstLivros.Items.Clear();
lstLivros.Items.Add("Código Título Autor Editora ");
foreach (string strItem in objLivro.buscaLivros(txtConsulta.Text)) {
lstLivros.Items.Add(strItem.ToString().Trim());
}
}
Objeto lstLivros:
private void lstLivos_SelectedIndexChanged(object sender, EventArgs e)
{
objReserva = new Reserva();
string strItem = objReserva.buscarReserva(lstLivros.SelectedItem.ToString().Substring(0, 2).Trim());
string meuRegistro = strItem;
if (meuRegistro.Length
>
0)
{
lblStatus.Text = "Reservado";
lblStatus.ForeColor = System.Drawing.Color.Red;
btnLivroCom.Enabled = true;
btnDevolver.Enabled = true;
btnReservar.Enabled = false;
// Variável com visão global
dadosReserva = meuRegistro;
}
else
{
lblStatus.Text = "Disponível";
lblStatus.ForeColor = System.Drawing.Color.Blue;
btnLivroCom.Enabled = false;
btnDevolver.Enabled = false;
btnReservar.Enabled = true;
}
}
Objeto btnLivroCom:
private void btnLivroCom_Click(object sender, EventArgs e)
{
Form f1 = new frmManu(dadosReserva);
f1.Show();
}
Objeto btnDevolver:
private void btnDevolver_Click(object sender, EventArgs e)
{
string regLivro = lstLivros.SelectedItem.ToString();
objReserva.limpaReserva(regLivro.Substring(0,2).ToString().Trim());
MessageBox.Show("Livro entregue!");
}
Objeto btnReservar:
private void btnReservar_Click(object sender, EventArgs e)
{
string regLivro;
objReserva = new Reserva();
regLivro = lstLivros.SelectedItem.ToString();
if (txtMatricula.Text.Length != 7) {
http://cnx.org/content/m47676/1.1/
OpenStax-CNX module: m47676
14
MessageBox.Show("Falta Matricula / Matricula Invalida");
return;
}
objReserva.gravarReserva(regLivro.Substring(0, 2).Trim(), txtMatricula.Text.Trim());
MessageBox.Show("Reserva realizada!");
txtMatricula.Text = "";
}
Agora para o segundo formulário:
Figure 17
Evento do objeto frmMenu:
private void frmMenu_Load(object sender, EventArgs e)
{
//MessageBox.Show(minhasReservas);
lblDataReserva.Text = minhasReservas.Substring(17, 10);
objAluno.buscaAluno(minhasReservas.Substring(7, 10).Trim());
lblMatricula.Text = objAluno.matricula.ToString() ;
lblNome.Text = objAluno.nome;
lblTelefone.Text = objAluno.telefone;
lblEndereco.Text = objAluno.endereco;
}
Nota: nesse projeto temos uma mudança no construtor do formulário frmMenu sendo necessário deixá-lo
assim:
http://cnx.org/content/m47676/1.1/
OpenStax-CNX module: m47676
15
public frmMenu(string argReserva)
{
InitializeComponent();
minhasReservas = argReserva;
}
Agora, para nalizar, vamos incluir as classes que fazem parte do projeto. Para incluir as classes devemos
clicar sobre
BibliotecaApp Add New Item Class.
Reserva) temos que incluir o código de cada uma.
Código da Classe Livro
class Livro
{
string[] arrRegistro;
StreamReader sr;
public string[] buscaLivros(string argLivro) {
sr = new StreamReader(@"C:\Temp\Livros.txt");
arrRegistro = new string[20];
int i = 0;
while (!sr.EndOfStream) {
string registro = sr.ReadLine();
if (registro.Contains(argLivro)) {
arrRegistro[i] = registro;
i++;
}
}
return arrRegistro;
}
}
Código da Classe Aluno
class Aluno
{
public string matricula;
public string nome;
public string telefone;
public string endereco;
StreamReader sr;
public void buscaAluno(string argCodigo) {
sr = new StreamReader(@"C:\Temp\Alunos.txt");
string regAluno;
while (!sr.EndOfStream) {
regAluno = sr.ReadLine().ToString();
if (regAluno.Contains(argCodigo)) {
string[] arrAluno = regAluno.Split(';');
matricula = arrAluno[0];
nome = arrAluno[1];
telefone = arrAluno[2];
endereco = arrAluno[3];
}
}
}
}
Código da Classe Reserva
http://cnx.org/content/m47676/1.1/
Após criar as três classes (Livro, Aluno e
OpenStax-CNX module: m47676
16
class Reserva
{
StreamReader sr;
StreamWriter sw;
string registro = "";
public string buscarReserva(string argCodigo) {
sr = new StreamReader(@"C:\Temp\Reservados.txt");
string linhaReg;
while (!sr.EndOfStream) {
linhaReg = sr.ReadLine().ToString();
if (argCodigo != linhaReg.Substring(0, 2))
{
registro = "";
}
else
{
registro = linhaReg;
sr.Close();
return registro;
}
}
sr.Close();
return registro;
}
public void gravarReserva(string argCodigo, string argMatricula) {
sw = new StreamWriter(@"C:\Temp\Reservados.txt",true);
sw.WriteLine(argCodigo + " " + argMatricula + " " + DateTime.Today.ToString().Substring(0, 10));
sw.Close();
}
public void limpaReserva(string argCodigo) {
string[] arrReserva = new string[0];
sr = new StreamReader(@"C:\Temp\Reservados.txt");
int i = 0;
while (!sr.EndOfStream) {
string strLinha = sr.ReadLine();
if (argCodigo != strLinha.Substring(0, 2).Trim()) {
arrReserva[i] = strLinha;
}
}
sr.Close();
sw = new StreamWriter(@"C:\Temp\Reservados.txt");
for (int j = 0; j
<
arrReserva.Length; j++){
sw.WriteLine(arrReserva[j]);
}
sw.Close();
}
}
O Código da Classe Program
static class Program
{
///
<summary>
http://cnx.org/content/m47676/1.1/
OpenStax-CNX module: m47676
17
/// The main entry point for the application.
///
</summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmConsultar());
}
}
note:
Referências:
Programação em C#:
Acessado em 10/09/2013
http://cnx.org/content/m47676/1.1/
http://www.ev.org.br/Cursos/Paginas/Online.aspx.

Documentos relacionados