Bom dia galera, tdo certo ? Bem, na minha aplicação preciso importar dados txt para o BD. Esses dados são referentes ao censo das escolas, contendo todas as informações da escola, como o cadastro da mesma, cadastro de alunos, etc. Os campos são separados por PIPE. Ví alguns tópicos sobre isso, como http://www.guj.com.br/java/251819-importacao-de-arquivo-txt-para-banco-de-dados , só estou em dúvida no seguinte: Por exemplo, preciso importar todos os alunos, sendo que o código do cadastro de alunos, é o nº 60 e começa apartir da metade do txt. De que maneira poderia fazer para começar a importar somente os alunos sendo que antes tem outras informações que nao vou utilizar no momento?
Se alguém puder ajudar, agradeço mto…Logo mais postarei os trechos de código baseado nos tópicos que li até agora…Vlw
Não sei como está a estrutura do arquivo, mas provavelmente vc tem algum registro ou alguma marcação q informe onde começam os nomes dos alunos correto? Se sim, vc pode fazer um if verificando se o registro é um nome de aluno e gravar no banco. Se postar o q vc já tem fica mais fácil d ajudar.
Bom dia cara, tdo certo ?? Já posto oke tenho e como estou fazendo…vlw
Bem, primeiro vou ter que fazer um upload na aplicação para o usuário escolher o arquivo…Por enquanto estou fazendo da seguinte maneira:
No meu bean:
public void leituraTXT() throws FileNotFoundException, IOException {
File file = new File("c://teste.TXT");
BufferedReader rd = new BufferedReader(new FileReader(file));
List<String> linhas = new ArrayList<String>();
String txt = rd.readLine();
String[] colunas = txt.split("|");
while ((txt = rd.readLine()) != null) {
linhas.add(txt);
System.err.println(colunas);
}
rd.close();
}
E no meu xhtml:
<h:outputLabel id="txt_lbl" value="Leitura:" for="txt"/>
<p:commandButton id="txt" update="@form"
value="Escolher arquivo" icon="ok"
action="#{alunoJsfBean.leituraTXT()}"/>
Meu arquivo, por exemplo, seria da seguinte maneira:
Se puder ajudar, agradeceria mto…Vlw…
Cara, ou eu não entendi muito bem a estrutura desse arquivo q vc me passou ou ele não tem um padrão para os nomes, se vc tem um padrão, por exemplo, toda coluna 5 possui a informação q vc precisa add ao banco, faça um laço percorrendo o array de String e grave a informação da coluna 5 no banco. Mais ou menos assim:
String[] colunas = txt.split("|");
for (String s : colunas) {
// chama um método para gravar a informação de "s" no banco
}
[quote=fabiocortolan]Cara, ou eu não entendi muito bem a estrutura desse arquivo q vc me passou ou ele não tem um padrão para os nomes, se vc tem um padrão, por exemplo, toda coluna 5 possui a informação q vc precisa add ao banco, faça um laço percorrendo o array de String e grave a informação da coluna 5 no banco. Mais ou menos assim:
[code]
String[] colunas = txt.split("|");
for (String s : colunas) {
// chama um método para gravar a informação de “s” no banco
}
[/code][/quote]
Boa tarde fabiocortolan, tdo certo ? Bem, oque preciso fazer é o seguinte: como viu no arquivo, tenho um número ( 60 ) . Esse numero corresponde ao cadastro de uma aluno. Por exemplo: Se eu tiver mais um 60, vai ter 2 alunos cadastrados…Aquele 00 corresponde ao cadastro de uma escola…Resumindo: onde tiver 60, todos os campos apartir do 60 devem ser salvos na tabela alunos do meu BD. Depois, quando vier outro 60 é outro aluno, consequentemente outro cadastro… Não sei se consegui explicar bem…Mas é isso que devo fazer…Esse txt as escolas fazem a geração dele para o censo educacional que vai pro governo…Deu pra entender ?? Se puder ajudar, agradeço mto…Vlw
Agora entendi, só mais uma dúvida, cada código “60”, “70”, “80” vai estar em uma linha correto? Se sim segue o exemplo:
public void leituraTXT() throws FileNotFoundException, IOException {
File file = new File("/home/fabio/Downloads/teste.txt");
BufferedReader rd = new BufferedReader(new FileReader(file));
// List<String> linhas = new ArrayList<String>(); // essa variável não é necessária
// Aki vc não precisa ler a linha
String txt = "";
// aki vc não inicia a variável pq o número de colunas é diferente nas linhas (se não estou enganado)
String[] colunas;
while ((txt = rd.readLine()) != null) {
colunas = txt.split("[|]+"); // fique atento ao "regex" tem q ser idêntico - sem espaço
if (colunas[0].equals("60")) {
for (String s : colunas) {
// aki vc coloca o código para gravar ou chama o método correspondente
System.out.println(s);
}
}
}
rd.close();
}
Agora entendi, só mais uma dúvida, cada código “60”, “70”, “80” vai estar em uma linha correto? Se sim segue o exemplo:
[code]
public void leituraTXT() throws FileNotFoundException, IOException {
File file = new File("/home/fabio/Downloads/teste.txt");
BufferedReader rd = new BufferedReader(new FileReader(file));
// List<String> linhas = new ArrayList<String>(); // essa variável não é necessária
// Aki vc não precisa ler a linha
String txt = "";
// aki vc não inicia a variável pq o número de colunas é diferente nas linhas (se não estou enganado)
String[] colunas;
while ((txt = rd.readLine()) != null) {
colunas = txt.split("[|]+"); // fique atento ao "regex" tem q ser idêntico - sem espaço
if (colunas[0].equals("60")) {
for (String s : colunas) {
// aki vc coloca o código para gravar ou chama o método correspondente
System.out.println(s);
}
}
}
rd.close();
}
[/code][/quote]
Boa tarde. Por exemplo, no meu txt tenho a seguinte linha:
60|43065899|121691954755||NATALIA DIANA PALLESI||22/12/2005|2|1|1|LOLIA MARTINEZ|VALDECIR PALLESI|1|76|43|4308706|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
Porem, entre || seria algum campo que esse usuário não possui dados. Na minha importação, ao invés de ficar em branco ou null, ele pega o próximo, no caso, a data de nascimento…
Abaixo, como estou fazendo:
public void leituraTXT() throws FileNotFoundException, IOException {
File file = new File("c://teste3.TXT");
BufferedReader rd = new BufferedReader(new FileReader(file));
// somente selecionar FORMATO TXT
String txt = "";
String[] colunas;
while ((txt = rd.readLine()) != null) {
colunas = txt.split("[|]+");
if (colunas[0].equals("60")) {
Aluno aluno = new Aluno();
aluno.setNome(colunas[3]);
if (!colunas[4].isEmpty()) {
aluno.setNumeroIdentificacaoSocial(colunas[4]); // aqui ele deveria pegar em branco...
}
if (colunas[6].equals("1")) {
aluno.setSexo("M");
} else {
aluno.setSexo("F");
}
getCrudService().save(aluno);
}
}
rd.close();
}
Poderia dar uma ajuda aí?? Se vc ou mais alguém puder ajudar, agradeço mto…Vlw…
Tente assim:
// Substitua isso:
colunas = txt.split("[|]+");
// por isso:
colunas = txt.split(Pattern.quote("|"));
[quote=fabiocortolan]Tente assim:
[code]
// Substitua isso:
colunas = txt.split("[|]+");
// por isso:
colunas = txt.split(Pattern.quote("|"));
[/code][/quote]
Daí cara, tdo certo ?? Eu tinha feito o seguinte e a princípio funcionou:
colunas = txt.split("[|]");
Vlw pela ajuda…Abc…
[quote=Ricardo Fávero Júnior]
Daí cara, tdo certo ?? Eu tinha feito o seguinte e a princípio funcionou:
colunas = txt.split("[|]");
Vlw pela ajuda…Abc…[/quote]
Cara, q estranho, eu tinha testado isso antes e não tinha funcionado, ele dava erro antes d compilar, mas se deu certo blz!