No momento em que redigimos essa lição, ainda não está definido qual o banco de dados que será nativo no micro OLPC. Fala-se no SQLite.
Nós vamos apresentar aqui um sistema de arquivamento muito simples mas que funciona. Aliás ser simples e funcional é um dos paradigmas de tudo que se refere ao OLPC.
Lembramos que o micro OLPC não tem disco rígido. Tem uma memória Flash com 512 Mb (sendo que pouco mais que 100 Mb é ocupado pelo sistema operacional). A memória é de 128 Mb. Isso dá uma idéia do tamanho de arquivo razoável, uma vez que ele vai inteiro para a memória.
Vamos trabalhar com arquivos texto (.TXT). E, na realidade, todo o arquivo vai ser só uma enorme linha. A divisão entre registros fica por conta do separador "dois-pontos" e a divisão entre campos pelo separador "jogo-da-velha"(#). Isso é uma convenção nossa, não do Squeak.
Vimos nas duas lições anteriores, como desconstruir strings que tenham separadores. Veremos aqui novos exemplos.
Para criar um objeto da Classe FileStream, ligamo-o a um arquivo .TXT - a ser criado ou existente. Vejamos dois casos:
fS1 := FileStream forceNewFileNamed:'meuarquivo.txt'.
fS2 := FileStream fileNamed:'meuarquivo.txt'.
Como na lição anterior, temos alguns mini-exercícios para mostrar os métodos:
setToEnd
Posiciona "cursor" depois do último caractere do arquivo (que é um longo string).
reset
Reposiciona o "cursor" no início do arquivo.
nextPutAll: x
Grava x (normalmente um String) no arquivo.
contentsOfEntireFile
Retorna todo o conteúdo do arquivo.
atEnd
Retorna true se o "cursor" está depois do fim do arquivo, ou false se não está.
close
Fecha o arquivo.
Exemplo
| oC stream| stream := FileStream forceNewFileNamed: 'meuarquivo.txt'. stream setToEnd. oC:= OrderedCollection new. oC add: '001#John#6576'. oC add: '002#Mary#8876'. oC add: '003#Carl#4231'. 1 to: oC size do: [ :i | i+1. stream nextPutAll: ( (oC at: i),':') . ]. stream close.
O arquivo será gravado na pasta MyEtoys - mesma onde são gravados os projetos.
Podemos ver o arquivo usando a janela "World" e abrindo um "file list".
Exemplo
|file bigString ordCol| file := FileStream fileNamed: 'meuarquivo.txt'. bigString := file contentsOfEntireFile. ordCol:= bigString findBetweenSubStrs: ':'. Transcript show: (ordCol at: 2). file close.
Resultado
002#Mary#8876
LIÇÃO ANTERIOR PRÓXIMA LIÇÃO