UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO TECNOLÓGICO PET - Engenharia de Computação Entrada e Saída de Dados Programação 1 Vitória, 28 de Maio de 2010 Ivan de Oliveira Nunes Engenharia de Computação ivanoliv.1@gmail.com Juan França Muniz de Souza Engenharia de Computação juan.franca@gmail.com Marcos Vinícius Caus Couto Engenharia de Computação marcoscaus@gmail.com
Sumário 1 Introdução 3 2 Funções básicas I/O 4 2.1 getchar e putchar........................ 4 2.2 Operador do............................ 4 2.3 getline, putstr e putstrln.................... 5 3 Tratando arquivos 7 3.1 readfile e writefile........................ 7 3.2 Import, openfile, hgetline................... 8 4 Considerações Finais 9 2
1 Introdução Haskell, como outras linguagens de programação, possui funções que se comunicam com o sistema operacional para realizar entrada e saída de dados. Estas operações trabalham com valores do tipo (IO t), e durante a sua avaliação requisitam operações de IO ao sistema operacional. O sistema de I / O em Haskell é puramente funcional, mas tem todo o poder expressivo encontrados em linguagens de programação convencionais. Ações típicas incluem a leitura, gravação de arquivos, leitura de entrada. 3
2 Funções básicas I/O 2.1 getchar e putchar getchar :: IO Char A função getchar serve para capturar um char. putchar :: Char IO() A função putchar serve para imprimir um char na tela. 2.2 Operador do Ações são sequenciadas pelo operador do. Exemplo: main :: IO() main = do c getchar putchar c Em primeiro lugar, é atribuído à variável c o caracter escrito. Em seguida é impresso o seu conteúdo na tela através da função putchar.veja abaixo: Agora iremos para funções mais interessantes. :-) 4
2.3 getline, putstr e putstrln getline:: IO String A função getline serve para capturar o que for escrito em uma linha. putstr:: String IO () A função putstr serve para imprimir uma string. putstrln:: String IO () A função putstrln serve para imprimir uma string seguida de um enter. Exemplo 1: main = do x getline putstr x Primeiramente, é atribuído a variável x o que for escrito. Em segundo lugar, é impresso na tela a variável x. Veja a figura abaixo: Exemplo 2: main = do putstrln Digite seu nome nome getline putstr nome 5
Veja abaixo: Com o que já vimos podemos fazer algo interessante.veja: JOGO DA PALAVRA Segue abaixo o código: main = do putstrln Digite a palavra tentativa getline if tentativa == palavra then putstr Acertou! else putstr Errou! where palavra = PET 6
3 Tratando arquivos 3.1 readfile e writefile readfile:: FilePath IO String Sintaxe: variável readfile endereço do arquivo A função readfile serve para leitura de um arquivo. writefile::filepath String IO () Sintaxe: writefile nome do arquivo ( o que deseja inserir ) A função writefile serve para escrever em um arquivo. Exemplo: adiciona = do putstr ( Escreva uma linha para adicionar ao arquivo Haskell.txt: ) linha getline arquivo readfile Haskell.txt writefile Haskell.txt (arquivo ++ \n ++ linha) putstr ( Linha adicionada! ) Antes: 7
Depois: Vale ressaltar que se o arquivo Haskell.txt não estiver na pasta, ele será criado. Observe também que o \n influencia na quebra de linha. 3.2 Import, openfile, hgetline openfile::filepath IOMode IO Handle Sintaxe: openfile endereço do arquivo ReadMode A função textit serve para abrir um arquivo de texto. Exemplo import IO main = do x openfile /Haskell.txt ReadMode y hgetline x putstr y Como hgetline e openfile não são definidas no módulo prelude, é necessário importar o módulo IO, na qual tais funções pertencem. hgetline é idêntica a getline visto acima. Porém, trata-se de um arquivo. E de forma similar, temos hgetchar, hputchar, etc. 8
4 Considerações Finais Essa simples apostila é introdutória. Portanto segue abaixo uma lista de sites que tratam do assunto com certo aprofundamento http://www.zvon.org/other/haskell/outputglobal/index.html http://www.haskell.org/tutorial/io.html http://book.realworldhaskell.org/read/io.html Fora as inúmeras apostilas que podem ser achadas na internet. Qualquer dúvida, entrem em contato com os monitores da disciplina. 9