No caso do arquivo CVS você poderia usar expressões regulares para separar os campos presentes em cada linha e, em seguida, a partir de inserts mesmo (caso não tenha uma entidade mapeada) ir populando a sua base de dados.
Outra opção, caso não queira usar expressões regulares seria a classe StringTokenizer, usando como separador o caractere ; (ou o caractere que esteja separando seus campos no arquivo csv).
Com relação ao arquivo txt, seria necessário ver qual a formatação do bichinho para ver qual a melhor forma.
kicolobo, Obrigado pela ajuda!
Mas como posso abrir um arquivo .cvs? Esta classe StringTokenizer, server para ler!
ex.: arquivo.cvs
book;autor;data
Grails teste;Jose;10/10/2009
Obrigado
E quando precisa ler vários arquivos, por exemplo:
clientes_1201.txt
clientes_5465.txt
clientes_8546.txt
Como ler todos?
Boa tarde.
Estou encontrando dificuldade para popular minhas classes de domínio com um arquivo csv.
Eu adicionei um println a cada linha lida do csv e eles estão sendo lidos, massss não estão sendo inseridos na minha tabela.
Preciso de um help.. não é nada urgente não.. comecei a me interessar pelo assunto depois do video "Grails: O que e porque"
Segue a estrutura do meu controlador "Importacao"
Importante:
- Telefone e Email são duas classes que se relacionam com a Pessoa, onde uma pessoa possui um ou mais telefones/email
- Tentei simplificar para inserção apenas do usuario.nome (comentando as outras linhas), mas mesmo assim, não rolou...
- Meu output mostra os campos bonitinho
Obrigado antecipadamente
-------------------------------
package meuProjeto
import org.core.stress.*
class ImportacaoController {
def index() {
def csv = new File("D:\SERVER\Arquivo.csv")
csv.splitEachLine(';') { campo ->
//def id = campo[0] ?:0
println(campo[0] +" "+ campo[1] +" "+ campo[2] +" "+ campo[3])
def pessoa = new Pessoa()
pessoa.nome = campo[0] ?:"Sem nome"
pessoa.addtelefones = [campo[1] ?:"Sem Residencial",campo[2] ?:"Sem Comercial"]
pessoa.emails = [campo[3] ?:"SemEmail@terra.com"]
pessoa.save()
}
}
}
Rafael Calastro