Projeto em haskell

Disponível somente no TrabalhosFeitos
  • Páginas : 5 (1171 palavras )
  • Download(s) : 0
  • Publicado : 14 de março de 2013
Ler documento completo
Amostra do texto
Laborat´rios de Inform´tica I o a
Universidade do Minho LEI

Relat´rio do projecto o

Resumo Este trabalho consiste na cria¸˜o de um programa na linguagem Haskell ca capaz de ler e verificar um ficheiro com dados e gerar resultados como estat´ ısticas e impressos sobre esses mesmos dados.

Conte´ do u
1 Introdu¸˜o ca 2 Reconhecimento dos dados 2.1 Parsing . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 2.2 Valida¸˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . co 3 Crach´s a 4 Estat´ ısticas 4.1 Modelo Latex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 An´lises multi-dimensionais a 1 2 2 3 3 4 4 5

1

Introdu¸˜o ca

Este trabalho foi desenvolvido na unidade curricular de Laborat´rios de Ino form´tica I da Licenciatura emEngenharia Inform´tica da Universidade do a a Minho.

1

Tem como objectivo criar um programa na linguagem Haskell que permita analisar um documento de texto com os dados das inscri¸˜es nas JOIN (Jornadas co de Inform´tica) e realizar opera¸˜es com esses mesmos dados: a co 1. Reconhecimento (parsing) do ficheiro das inscri¸˜es e valida¸˜o das mesco ca mas;
A 2. Gerar crach´s, em L TEX, para todas aspessoas inscritas; a

3. Gerar estat´ ısticas acerca dos inscritos; 4. Gerar an´lises multi-dimensionais dos dados das inscri¸˜es. a co

2

Reconhecimento dos dados

O programa come¸a por importar duas librarias, uma para as fun¸˜es de parsing c co e outra para a interac¸˜o com o exterior (imprimir mensagens, ler e escrever ca ficheiros). import Text.ParserCombinators.Parsec importSystem.IO main :: IO () main = do hSetBuffering stdout NoBuffering putStr " Insira o nome do seu ficheiro: " caminho do tarefa3 (tarefa1 r) ; tarefa4 (tarefa1 r) A fun¸˜o main ´ a principal fun¸˜o da aplica¸˜o. E executada logo que o ca e ca ca ´ programa ´ aberto e o que faz ´ dar uma mensagem ao utilizador e receber a e e localiza¸˜o do ficheiro com os dados das JOIN, lˆ esse mesmo ficheiro aplicaca elhe as fun¸˜es de parsing e caso esteja tudo correcto, executa todas as outras co fun¸˜es, caso contr´rio d´ um erro. co a a

2.1

Parsing

Para fazer o parsing do ficheiro baseamo-nos no livro Real World Haskell [1]. csvFile = endBy line eol line = sepBy cell (char ’,’) cell = quotedCell many (noneOf ",\n\r")

2

eol =

try (string "\n\r") try (string "\r\n") string "\n" string"\r" "end of line"

Depois de receber os dados do ficheiro, a fun¸˜o parse 1 invocada no main precisa ca de saber alguns parˆmetros. Para isso come¸amos pela fun¸˜o csvFile que indica a c ca os caracteres que podem servir para separar cada registo (eol ) e cada campo desses registos (line).

2.2

Valida¸˜es co

Depois de conclu´ o parsing dos dados estes ficam organizados numa lista de ıdolistas de String, o que torna mais f´cil a sua manipula¸˜o. a ca duplicados :: [[String]] -> [[String]] duplicados [z]=[z] duplicados ([a,b,c,d,e,f,g,h,i,j,k,l]:xs) | duplicadosAux a b d xs = duplicados xs | otherwise = ([a,b,c,d,e,f,g,h,i,j,k,l] : duplicados xs) duplicadosAux :: String -> String -> String -> [[String]] -> Bool duplicadosAux _ _ _ [] = False duplicadosAux x y z([a,b,c,d,e,f,g,h,i,j,k,l]:xs) | y == b = True | z /= "" && z == d = True | otherwise = duplicadosAux x y z xs valida [] = [] valida ([a,b,c,d,e,f,g,h,i,j,k,l]:xs) | a == "" || b == "" = valida xs | c/="" && d/="" && e=="" && f=="" && g=="" || | otherwise = valida xs Sempre que forem encontrados registos duplicados, o mais antigo ser´ rea movido. Caso exista algum registo incompleto ou inv´lido este ser´ removido a ana fun¸˜o valida 2 . ca

3

Crach´s a

A Para esta tarefa o mais indicado seria gerar um documento L TEX (Crach´) para a cada um dos participantes, convertˆ-los para o formato pdf e inclui-los num novo e A documento L TEX, onde estes poderiam ser impressos em conjunto. No entanto, apesar de a ideia parecer promissora, n˜o fomos capazes de a exea cutar.
1 Fun¸˜o ca 2 Devido

inclu´ na...
tracking img