Planilha ASCII
Este projeto consiste em construir uma planilha eletrônica em modo texto, usando a biblioteca NCurses para a gestão do terminal. A interface da planilha deve ser similar à figura abaixo:
Funcionalidades
- ler e escrever arquivos em formato CSV (deve ser capaz de ler/escrever arquivos simples compatíveis com o LibreOffice Calc ou Microsoft Excel);
- suportar matrizes de até 100 linhas × 26 colunas (a tela deve “deslizar” na horizontal e vertical para mostrar parte visível da planilha);
- cada coluna da planilha ocupa 8 caracteres na tela;
- implementar corte/cópia/cola de grupos de células contíguas;
- ser capaz de calcular fórmulas simples;
- se adaptar às dimensões do terminal ao iniciar.
Formato CSV
O formato CSV - Comma Separated Values (Valores Separados por Vírgula) é um formato popular para a representação de tabelas de dados. Existem diversas variantes desse formato, então neste projeto assumimos a seguinte especificação:
- campos delimitados por vírgula
- linhas delimitadas por enter (\n)
- campos representados por valores textuais (não em binário)
- qualquer valor/campo pode ser envolto por aspas duplas (“)
- campos contendo vírgulas devem ser envoltos por aspas duplas (”“)
- números reais usam ponto ”.“ para a parte fracionária
- cada campo pode ter até 255 caracteres (mostrar até 8 na tela)
- ignorar campos contendo “\n” ou aspas como parte do valor
Exemplo de um arquivo CSV:
- exemplo.csv
Data,Descrição,Valor 05/04/2016,"Despesas apto (luz, água)",50 07/04/2016,Material de limpeza,20.30 11/04/2016,Matrícula inglês,110 13/04/2016,"Papelaria (cadernos, canetas)",25 15/04/2016,Supermercado,60 19/04/2016,Credito ônibus,50 20/04/2016,Almoço (pizza),20 26/04/2016,Camiseta,35 30/04/2016,Aluguel,"500"
Valores nas células
- números inteiros e reais, positivos e negativos
- strings em UTF8
- fórmulas simples: strings no formato
= A op B
, onde A e B são números ou referências de células eop
é uma operação algébrica simples (+, -, *, /).
Células podem ser referenciadas usando suas coordenadas: por exemplo, a string A5 referencia o valor da célula na coluna A e linha 5.
Controles
- Setas (←↑↓→): mover cursor (para selecionar a célula ativa)
- Enter: editar a célula corrente (selecionada)
- Arquivos:
- ^S : salvar arquivo corrente
- ^R: ler arquivo
- Cortar/Copiar/colar:
- ^space : fixar âncora (define um retângulo junto com o cursor)
- ^C: copiar retângulo para o clipboard
- ^X: cortar retângulo para o clipboard
- ^V: colar conteúdo do clipboard a partir da posição do cursor
- ^Q: encerrar o programa (quit)
Forma de chamada
texcel
: abre uma planilha em branco (sem nome)texcel arq1.csv
: abre o arquivoarq1.csv
Requisitos do código-fonte
- Ser escrito em C padrão (C99 ou similar)
- não gerar warnings ao usar flags
-Wall
- o executável deve se chamar
texcel
(de Text Excel)
- ser estruturado em vários arquivos. Por exemplo:
texcel.c
(programa principal)csvfile.c
,csvfile.h
(lê/escreve arquivos CSV)formula.c
,formula.h
(funções para analisar e calcular fórmulas)- …
- Ter um Makefile:
- alvos
all
,clean
epurge
- compilação e ligação devem ser separadas
- Ler e calcular estes arquivos de teste:
Material de apoio
Ncurses:
- Ncurses Programming Howto (leia com atenção a seção sobre inicialização)
- Exemplos do ncurses no Linux, em
/usr/lib/ncurses/examples/
(pacotencurses-examples
) - Código-fonte do pacote
ncurses-examples
disponível no Debian e derivados (Ubuntu, Mint, etc).
Instalação da biblioteca NCurses no Linux (Ubuntu, Debian, Mint):
sudo apt-get install libncurses-dev
O código de inicialização da biblioteca NCurses, com as configurações necessárias para este projeto, é o seguinte:
initscr () ; // inicializa a biblioteca ncurses raw () ; // permite tratar teclas de controle (^C, ^Z, etc) keypad (stdscr, TRUE) ; // habilita leitura de teclas de setas, Fn, etc noecho () ; // não escreve as teclas lidas na tela curs_set (0) ; // esconde o cursor do terminal
Projetos similares a este:
- … (existem outros)