17

Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

Embed Size (px)

Citation preview

Page 1: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

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 orientadaa objetos e sua estrutura é baseada na linguagem C++, mas também tem in�uência de outras linguagensorientada a objetos. Além de ser uma linguagem de fácil aprendizagem podemos ainda contar com a pratici-dade dos recursos do ambiente de desenvolvimento do Visual Studio. Neste artigo, indicarei como trabalharcom arquivos de texto no C#. Mostrarei uma prévia do conhecimento necessário para trabalhar com essesarquivos, 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 IDEVisual Studio 2010 Express. Essa ferramenta é gratuita e pode ser baixada no site da Microsoft. Parainstalação do Visual Studio temos que seguir os passos listados, abaixo:

• Primeiro: acessar o site http://www.microsoft.com/visualstudio/ptb1 ir na guia Downloads depois;• Segundo: escolher a versão em seguida na opção Visual Studio 2010 Express;

• Terceiro: depois em Visual C# 2010 Express escolher o idioma e clicar em Instalar agora.

Agora após a instalação do programa podemos acessá-lo em botão do Windows � Todos os Programas �Microsoft Visual Studio 2010 Express.

*Version 1.1: Sep 23, 2013 7:54 am -0500�http://creativecommons.org/licenses/by/3.0/1http://www.microsoft.com/visualstudio/ptb

http://cnx.org/content/m47676/1.1/

Page 2: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

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 umalinguagem de programação in�uencia no tamanho que o dado ocupa na memória do computador. Qualquerlinguagem 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 deforma mais especi�ca 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:

• Booleanos• Numéricos

Variável de Valor - Tipo Booleano

Esse tipo representa valores lógicos, ou seja, verdadeiro (true) ou falso (false). Quando esse tipo devariável é declarado no C#, o seu valor padrão é false ( caso não seja de�nido 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

http://cnx.org/content/m47676/1.1/

Page 3: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

OpenStax-CNX module: m47676 3

• 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.Variáveis do tipo Referência também tem duas subdivisões sendo elas:

• Class• String

Referência - Class

É um tipo de dado construído, ou seja, um modelo que pode conter campos, constantes e operaçõespróprias.

Referência � string

Em C# o tipo string herda diretamente da classe de objetos e serve também para armazenar dados dotipo texto.

É preciso sempre analisar em qual situação deve-se usar determinado tipo de dado para não ter uso inad-equado da memória do computador como, por exemplo, declarar uma variável do tipo �oat para trabalharcom informações de idade. Nesse caso, o tipo int já estaria de bom grado. Supondo que cada quadradinhodas imagens abaixo representa um endereço de memória e que cada um tivesse a capacidade de armazenaraté 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:

Figure 2

http://cnx.org/content/m47676/1.1/

Page 4: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

OpenStax-CNX module: m47676 4

Usando o int:

Figure 3

Trabalhando com Vetores

Vetores são estruturas de dados onde podemos armazenar uma quantidade de um tipo especi�co de dados.O tipo especi�cado em um vetor será armazenado em posições diferentes dele. Para �car mais claro vamosa um exemplo. Declarar um vetor que trabalhara com dados do tipo texto com no máximo cinco posiçõesseria assim:

string[] pessoa = new string(5);pessoa[0] = �maria�;pessoa[1] = �antonio�;pessoa[2] = �joao�;pessoa[3] = �rodrigo�;pessoa[4] = �marinho�;

Figure 4

Os vetores sempre iniciam em zero, por tanto, se for declarado um vetor de cinco posições teremos naverdade um intervalo de zero a quatro, ou seja, o tamanho de um vetor declarado será sempre sua quantidadedeclarada 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, porexemplo, essa variável pode ser atribuída à outra variável de um tipo ponto-�utuante e a conversão ocorrede forma automática. Quando isso ocorre dizemos que ocorreu um cast implícito. No entanto, um tipo �oat

http://cnx.org/content/m47676/1.1/

Page 5: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

OpenStax-CNX module: m47676 5

não pode ser atribuído em um tipo int, isso porque um tipo �oat é capaz de armazenar um volume maior deinformaçõ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:

Figure 6

Forma Explicita

Em alguns casos é necessário realizar a conversão dos tipos de dados de forma explicita. Um exemplo deconversão explicita pode ser usando um cast ou um comando de conversão. Vamos ver as duas formas:

Usando Cast

http://cnx.org/content/m47676/1.1/

Page 6: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

OpenStax-CNX module: m47676 6

No caso do cast nós podemos converter operações simples como, por exemplo, um tipo �oat para umtipo int, mas devemos tomar cuidado com esse tipo de conversão já que podemos ter perda signi�cativa dedados. 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íamosa parte decimal do número. Fazemos um cast colocando antes do valor atribuído e entre parênteses o tipode dados para o qual vamos usar.

Exemplo de cast:

Figure 7

Usando Comandos

O C# disponibiliza comandos para conversão de tipos de dados através da classe Convert. Para usaresse 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 daclasse Convert:

Figure 8

http://cnx.org/content/m47676/1.1/

Page 7: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

OpenStax-CNX module: m47676 7

Trabalhando com Classes

Na programação uma classe nada mais é que um modelo onde nós de�nimos o comportamento de umobjeto através de ações, estados e atributos. Pela de�nição da estrutura da classe podemos identi�car otipo 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, entregae pesquisa de livros. Certamente nesse sistema teríamos uma entidade responsável pela identi�cação doslivros, ou seja, uma classe que poderíamos dar o nome de Livro. Após identi�carmos a necessidade decriação dessa classe teríamos que de�nir sua estrutura e basicamente o que podemos encontrar em um livroseria ISBN, Autor, Editora e Paginas. Esses itens seriam os atributos da nossa classe Livro as ações seriammé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) dedados em arquivos sequenciais.

StreamWriter

Com os recursos disponíveis nessa classe podemos trabalhar com a escrita de caracteres em arquivossequenciais. Por exemplo, para escrever a seguinte frase em um arquivo poderíamos criar o código, abaixo:

Figure 9

O código acima cria um arquivo chamado dados.txt (caso o arquivo ainda não exista) e escreve nessearquivo o texto �Meus dados escritos no arquivo� e por �m fecha a conexão com o arquivo. Toda vez que essecódigo for executado o texto será sobre escrito, mas para evitar que isso aconteça pode-se incluir um segundoparâmetro no construtor da classe. Assim, o código manteria os dados já existes no arquivo e incluiria novossempre após o ultimo registro.

http://cnx.org/content/m47676/1.1/

Page 8: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

OpenStax-CNX module: m47676 8

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:

Figure 11

Agora, vamos por em prática os conceitos vistos criando um mini-sistema para controle de empréstimode livros em uma biblioteca universitária. Nosso sistema será bem simples. Teremos uma classe Alunopara controle dos alunos, uma classe Livro controle dos livros e uma classe Reservas para controle do livrosemprestados. 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

http://cnx.org/content/m47676/1.1/

Page 9: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

OpenStax-CNX module: m47676 9

Figure 12

Arquivo Livros.txt

Figure 13

Arquivo Reservados.txt

http://cnx.org/content/m47676/1.1/

Page 10: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

OpenStax-CNX module: m47676 10

Figure 14

Agora, criaremos um projeto do tipo Windows Form Application no Visual Studio. Abra o VisualStudio, depois vá em File � New � Project em seguida, nos Templates escolha a opção Windows FormApplication e dê um nome para sua aplicação conforme a imagem abaixo:

http://cnx.org/content/m47676/1.1/

Page 11: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

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ãoa classe Program.cs e um formulário nomeado como Form1, mas precisamos incluir novos objetos nesseprojetos. Primeiro, vamos incluir mais um Windows Form e nomear para frmMenu e renomear o já existentepara frmConsultar. Depois, inserir os outros objetos até que �que igual a imagem abaixo:

http://cnx.org/content/m47676/1.1/

Page 12: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

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/

Page 13: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

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 globaldadosReserva = 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/

Page 14: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

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/

Page 15: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

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. Após criar as três classes (Livro, Aluno eReserva) 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/

Page 16: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

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/

Page 17: Arquivos de Textos no C - Básico - cnx.org1.pdf... · Arquivos de Textos no C ... TRABALHANDO COM ARQUIVO DE TEXTO NO C# Introdução A linguagem C# foi criada pela Microsoft e faz

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#: http://www.ev.org.br/Cursos/Paginas/Online.aspx.Acessado em 10/09/2013

http://cnx.org/content/m47676/1.1/