Opa,Paulo,
Acho que fiz conforme sua orientação, porém o programa nao grava na tabela e não retorna nenhum erro, veja:
Linha do arquivo cxq9021509.csv:
1;32;2891;12856;1;32;1300314013;850517;249300;1908;20090818;32;10007;20090917
Trecho de código que chama a função sql, para gravação no BD somente dos campos Banco, Agencia e Conta:
$rsCheques = $mySQL->sql("LOAD LOCAL DATA INFILE 'c:\CST\cxq9021509.csv' INTO TABLE tblcxq902 (Banco, Agencia, Conta)FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'");
Obs: O primeiro campo da tabela é o ID do tipo autoincremento.
Estou certo de que tenha seguido minha orientação. Porém, perdão, eu errei!
Segue nossa consulta SQL:LOAD LOCAL DATA INFILE 'c:\CST\cxq9021509.csv' INTO TABLE tblcxq902 (Banco, Agencia, Conta)FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'Eu não havia reparado antes, mas oLOCAL
deve vir após oLOAD DATA
, sendo portantoLOAD DATA LOCAL
. Outro problema é o ponto-vírgula no lugar da vírgula emFIELDS TERMINATED BY
. Eu já tinha "arrumado" mas acho que tu não percebeu.
Outra coisa: eu errei ao te dizer que o nome dos campos viriam após o nome da tabela. Eles ficam no final, após toda "configuração" do comando. Portanto, nossa consulta fica:LOAD DATA LOCAL INFILE 'c:\CST\cxq9021509.csv' INTO TABLE tblcxq902 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (Banco, Agencia, Conta)Isto funciona.
Outra coisa interessante que notei, que vale o comentário, é que se você quiser ignorar alguma coluna do arquivo CSV no momento da inserção, basta especificar as colunas com arroba. Exemplo: quero apenas a agência e a conta. Ficaria assim:LOAD DATA LOCAL INFILE 'c:\CST\cxq9021509.csv' INTO TABLE tblcxq902 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (@Banco, Agencia, Conta)E por aí vai...
[]’s
Paulo,
É perfeito! Converti o arquivo e realizei a importação em 3 segundos. Mas a minha tarefa está só começando. Espero
contar com você em novos desafios.
Muiiiito Obrigado e que Deus te ilumine.
Opa,Paulo,
Acho que fiz conforme sua orientação, porém o programa nao grava na tabela e não retorna nenhum erro, veja:
Linha do arquivo cxq9021509.csv:
1;32;2891;12856;1;32;1300314013;850517;249300;1908;20090818;32;10007;20090917
Trecho de código que chama a função sql, para gravação no BD somente dos campos Banco, Agencia e Conta:
$rsCheques = $mySQL->sql("LOAD LOCAL DATA INFILE 'c:\CST\cxq9021509.csv' INTO TABLE tblcxq902 (Banco, Agencia, Conta)FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'");
Obs: O primeiro campo da tabela é o ID do tipo autoincremento.
Estou certo de que tenha seguido minha orientação. Porém, perdão, eu errei!
Segue nossa consulta SQL:LOAD LOCAL DATA INFILE 'c:\CST\cxq9021509.csv' INTO TABLE tblcxq902 (Banco, Agencia, Conta)FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'Eu não havia reparado antes, mas oLOCAL
deve vir após oLOAD DATA
, sendo portantoLOAD DATA LOCAL
. Outro problema é o ponto-vírgula no lugar da vírgula emFIELDS TERMINATED BY
. Eu já tinha "arrumado" mas acho que tu não percebeu.
Outra coisa: eu errei ao te dizer que o nome dos campos viriam após o nome da tabela. Eles ficam no final, após toda "configuração" do comando. Portanto, nossa consulta fica:LOAD DATA LOCAL INFILE 'c:\CST\cxq9021509.csv' INTO TABLE tblcxq902 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (Banco, Agencia, Conta)Isto funciona.
Outra coisa interessante que notei, que vale o comentário, é que se você quiser ignorar alguma coluna do arquivo CSV no momento da inserção, basta especificar as colunas com arroba. Exemplo: quero apenas a agência e a conta. Ficaria assim:LOAD DATA LOCAL INFILE 'c:\CST\cxq9021509.csv' INTO TABLE tblcxq902 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (@Banco, Agencia, Conta)E por aí vai...
[]’s
Paulo,
É perfeito! Converti o arquivo e realizei a importação em 3 segundos. Mas a minha tarefa está só começando. Espero
contar com você em novos desafios.
Muiiiito Obrigado e que Deus te ilumine.
Paulo,
Nas linhas do arquivo texto existem duas informações de datas em posições diferentes. Preciso
capturar essas datas, formatá-las para o formato brasileiro (dd/mm/aaa) para gravar no BD
juntamente com as outras informações. Gostaria que no momento de geração do arquivo csv
essa transformação para o formato brasileiro já fosse feita. É possivel?? São as posições "(\d{8})"
do código abaixo.
Outra coisa, as informações apóso último"(\d{8})" eu gostaria que não entrassem na geração do csv, pois
existe uma quebra de linha neste ponto que esta provocando a entrada de "sujeira"no arquivo csv.
grato.
fputcsv($csv,preg_split( '{(\d{1})\d(\d{4})\d(\d{4})\d(\d{9})(\d{3})\d(\d{4})\d(\d{10})\d(\d{6})(\d{17})\d(\d{4})(\d{8})\d{20}(\d{7})\d{16}(\d{8})}', trim($entry), 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE ));