A capacidade de ler (e escrever) um arquivo de texto dentro e fora de uma matriz de string é, creio, um requisito bastante comum. Também é muito útil ao iniciar com uma linguagem, eliminando a necessidade de acessar um banco de dados inicialmente. Existe um em Golang?
por exemplo
func ReadLines(sFileName string, iMinLines int) ([]string, bool) {
e
func WriteLines(saBuff[]string, sFilename string) (bool) {
Eu preferiria usar um existente em vez de duplicar.
Respostas:
No lançamento do Go1.1, existe uma API bufio.Scanner que pode ler facilmente as linhas de um arquivo. Considere o seguinte exemplo acima, reescrito com Scanner:
fonte
Se o arquivo não for muito grande, isso pode ser feito com as funções
ioutil.ReadFile
estrings.Split
assim:Você pode ler a documentação dos pacotes ioutil e strings .
fonte
"io/ioutil"
\r
. Portanto, você pode ter um\r
anexo a cada elemento.Não é possível atualizar a primeira resposta.
De qualquer forma, após o lançamento do Go1, houve algumas mudanças importantes, então eu atualizei conforme mostrado abaixo:
fonte
Você pode usar os.File (que implementa a interface io.Reader ) com o pacote bufio para isso. No entanto, esses pacotes são construídos com o uso de memória fixa em mente (não importa o tamanho do arquivo) e são bastante rápidos.
Infelizmente, isso torna a leitura de todo o arquivo na memória um pouco mais complicada. Você pode usar um bytes.Buffer para juntar as partes da linha se elas excederem o limite da linha. De qualquer forma, recomendo que você tente usar o leitor de linha diretamente no seu projeto (principalmente se não souber o tamanho do arquivo texto!). Mas se o arquivo for pequeno, o exemplo a seguir pode ser suficiente para você:
Outra alternativa pode ser usar io.ioutil.ReadAll para ler o arquivo completo de uma vez e depois fazer o corte por linha. Não dou um exemplo explícito de como escrever as linhas de volta no arquivo, mas isso é basicamente
os.Create()
seguido por um loop semelhante ao do exemplo (consulte Recursosmain()
).fonte
gob.Encode()
para isso. O resultado é um arquivo binário em vez de um arquivo de texto separado por nova linha. Este arquivo pode conter todo tipo de dados, pode ser analisado de forma eficiente, o arquivo resultante será menor e você não terá que lidar com essas novas linhas e alocação dinâmica. Portanto, é provavelmente mais adequado para você se você apenas deseja manter algo para uso posterior com Go.ou
fonte