David SP 0 Denunciar post Postado Fevereiro 27, 2007 Ola Pessoal,Estou precisando importar um arquivo TXT para o MySQL, porém, os dados estão em linhas. Não achei um tópico falando sobre o assunto, por isso estou postando a dúvida aqui.Estrutura do arquivo texto:Nome da EmpresaEndereço, Nº, BairroCep, Cidade - EstadoTelefoneemailLinha de produtosNome da EmpresaEndereço, Nº, BairroCep, Cidade - EstadoTelefoneemailLinha de produtosComo poderia importar este arquivo?AbraçosDavid Compartilhar este post Link para o post Compartilhar em outros sites
PauloRJ 4 Denunciar post Postado Fevereiro 27, 2007 Vê se essa leitura ajuda: http://forum.imasters.com.br/index.php?sho...6026&hl=txt http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif dúvidas posta seu codigo. Compartilhar este post Link para o post Compartilhar em outros sites
David SP 0 Denunciar post Postado Fevereiro 28, 2007 Ola Paulo,Eu olhei o seu exemplo e achei interessante, porem, pelo que eu entendi eu precisaria ter um espaço determinado entre os campos no meu arquivo texto para esse codigo funcionar. Assim, precisaria manualmente dar tabs ou espaçamentos entre os campos para estabelecer um numero de caracteres exatos. Ex:Nome da Empresa (50 carac)Endereço (50), Nº (5), Bairro (20)É isso?Eu estava pensando em uma outra maneira talvez um pouco mais facil de fazer isto. Colocar cada campo em uma linha e trazer a linha. Fiz o seguinte:Criei um arquivo texto (nomes.txt) com:nomeenderecotelnomeenderecotel <?php$conexao = mysql_connect("localhost", "xxx", "xxx");$db = mysql_select_db("xxx");$arquivo = 'nomes.txt';$arq = fopen($arquivo,'r');while(!feof($arq))$linha[] = fgets($arq); // cria um array com o conteudo do arquivo$sql = "INSERT INTO teste (nome, endereco, tel, branco) VALUES ('$linha[0]', '$linha[1]', '$linha[2]', '$linha[3]')";$result = mysql_query($sql) or die(mysql_error());?> O código importou as primeiras quatro linhas.Minha dúvida: Como fazer para que quando chegar na linha 5, ele comece denovo, contando a linha 5 o campo "nome" de um novo registro"?Agradeço a atenção.AbraçosDavid Compartilhar este post Link para o post Compartilhar em outros sites
David SP 0 Denunciar post Postado Fevereiro 28, 2007 Alguem pode ajudar? Compartilhar este post Link para o post Compartilhar em outros sites
Anderson Mello 3 Denunciar post Postado Fevereiro 28, 2007 Olá, David, bem-vindo ao fórum.Para importar, supondo que seu arquivo de texto segue exatamente esta formatação, você poderia então ler o conteúdo, linha por linha, ao mesmo tempo que incrementa um contador. Verifique então a cada reinício do loop se o módulo por sete desse contador é zero (exemplo, $i % 7 == 0), e apenas incremente o contador. Assim você salta a linha e executa a query, aí o contador segue adiante e retoma o próximo "registro".Estou de saída agora, mas posta aí o que conseguiu entender, aí vou te ajudando ;)[]sAnderson Mello Compartilhar este post Link para o post Compartilhar em outros sites
David SP 0 Denunciar post Postado Março 1, 2007 Ola Anderson, obrigado pela ajuda. Além de novo no fórum, sou iniciante em PHP... O que significa: "Verifique então a cada reinício do loop se o módulo por sete desse contador é zero (exemplo, $i % 7 == 0)"? Eu tentei fazer um loop, porém não tive sucesso...com certeza estou fazendo algo errado, pois está estourando o tempo o tempo de execução de 30s. O código: <?phpinclude 'conexao.php';$arquivo = 'nomes.txt';$arq = fopen($arquivo,'r');$i = 1;$linha[] = fgets($arq);while(!feof($arq)){ $nome = $linha[$i]; $i++; $endereco = $linha[$i]; $i++; $telefone = $linha[$i]; $i++; $fax = $linha[$i]; $i++; $sql = "INSERT INTO teste (nome, endereco, telefone, fax) VALUES ('$nome', '$endereco', '$telefone', '$fax')";$result = mysql_query($sql) or die(mysql_error()); } ?> Agradeço a ajuda de vocês para resolver isto. Abraços David Compartilhar este post Link para o post Compartilhar em outros sites
JulioFox 0 Denunciar post Postado Março 1, 2007 Saudações, entra no prompt de comando do mysql e faz assim:load data infile "diretorio/arquivo.txt" into table nomedatabela fields terminated by ',' enclosed by '"' lines terminated by '\r\n'É muito veloa este comando...Espero ter dado tempo. Compartilhar este post Link para o post Compartilhar em outros sites
David SP 0 Denunciar post Postado Março 1, 2007 Ola Julio, muito obrigado pela ajuda.Tentei fazer o que voce descreveu. Entrei no PHPMyAdmin, acessei a tabela teste e cliquei em SQL (este é o prompt de comando?)Digitei:load data infile "admin/nomes.txt" into table teste fields terminated by ',' enclosed by '"' lines terminated by '\r\n'e apareceu a mensagem:Erroconsulta SQL:LOAD DATA INFILE "admin/nomes.txt" INTO TABLE teste FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'Mensagens do MySQL : Documentação#1045 - Access denied for user: 'yara@localhost' (Using password: YES)Minhas dúvidas:1)o diretório base é a raiz? o meu arquivo texto esta em admin/nomes.txt.2)Essa instrução que voce me passou faz com que o SQl importe um arquivo texto com a seguinte estrutura a baixo (que é o que eu preciso)?nome1endereco1telefone1nome2endereco2telefone2nome3endereco3telefone3AbraçosDavid Compartilhar este post Link para o post Compartilhar em outros sites
Anderson Mello 3 Denunciar post Postado Março 1, 2007 David, acho que você nos confundiu ^_^ Há três estruturas de arquivos. Uma com vários dados, outra com nome, endereço e telefone e outra incluindo o fax. Qual é a estrutura deste txt?Você quer fazer uma rotina para importar vários arquivos de texto nesta estrutura ou é uma inserção inicial apenas?[]sAnderson Mello Compartilhar este post Link para o post Compartilhar em outros sites
David SP 0 Denunciar post Postado Março 1, 2007 Ola Anderson,Desculpe se acabei misturando as coisas.É que na primeira resposta o PauloRJ deu uma sugestão em que pelo que eu entedi, eu precisaria ter no arquivo texto os campos delimitados por tamanhos fixos, como nome (50 caracteres), telefone (20 caracteres), etc.Porém, nesse meu arquivo texto, eu não tenho um delimitador fixo, como "," ";" "tabulações", etc...Então, eu achei mais facil deixar um campo em cada linha e importar cada linha como sendo um campo.A estrutura atual do meu txt está assim:empresa1endereco1telefone1empresa2endereco2telefone2empresa3endereco3telefone3e assim por diante.Eu preciso que o codigo entenda a linha 1=campo1, linha 2 = campo2, linha3=campo3, ignore a linha 4 (que está em branco) e quando chegar na linha 5 (que e uma nova empresa, ou seja, um novo registro), ele comece novamente linha5=campo1, linha6=campo2, linha7=campo8, ignora linha 9 (novamente em branco).Eu fiz o codigo:<?phpinclude 'conexao.php';$arquivo = 'nomes.txt';$arq = fopen($arquivo,'r');$i = 1;$linha[] = fgets($arq);while(!feof($arq)){ $nome = $linha[$i]; $i++; $endereco = $linha[$i]; $i++; $telefone = $linha[$i]; $i++; $sql = "INSERT INTO teste (nome, endereco, telefone) VALUES ('$nome', '$endereco', '$telefone')";$result = mysql_query($sql) or die(mysql_error()); }?>Mas está estourando o tempo de execução de 30s.Agradewço a ajuda.AbraçosDavid Compartilhar este post Link para o post Compartilhar em outros sites
Anderson Mello 3 Denunciar post Postado Março 1, 2007 30 segundos é um limite padrão. Se o arquivo for muito grande, ocorrerá isso.Se teu código está inserindo os primeiros registros corretamente, experimenta então colocar set_time_limit(0) no início do arquivo e faça um novo teste ;)[]sAnderson Mello Compartilhar este post Link para o post Compartilhar em outros sites
David SP 0 Denunciar post Postado Março 1, 2007 Ola Anderson,O arquivo texto que estou usando e um arquivo de teste. Ele contém exatamente os seguintes dados:nomeenderecotelnome1endereco1tel1nome2endereco2tel2Como da para ver, o arquivo e bem pequeno.Eu percebi que na tabela "teste" foram criados os 3 registros, porém apenas o campo nome do primeiro registro foi preenchido. Os outros estão em branco.Deve haver algum problema no meu código...tanto que eu inseri set_time_limit(0) conforme sua sugestão, e a pagina não parou de carregar. Fui olhar a tabela e haviam quase 100 registros..todos em brancoAbraçosDavid Compartilhar este post Link para o post Compartilhar em outros sites
Anderson Mello 3 Denunciar post Postado Março 1, 2007 Tenta o seguinte: <?phpinclude 'conexao.php';$arquivo = fopen ("nomes.txt", "r");$i = 1;while (!feof ($arquivo)) { $controle = $i % 4; $linha = fgets($arquivo, 4096); switch($controle) { case 1: $nome = $linha; break; case 2: $endereco = $linha; break; case 3: $telefone = $linha; $sql = "INSERT INTO teste (nome, endereco, telefone) VALUES ('$nome', '$endereco', '$telefone')"; $result = mysql_query($sql) or die(mysql_error()); } $i++; }fclose ($arquivo);?> Funcionando, você pode então pegar o nome do arquivo vindo de um form e fazer uma interface para importar os arquivos. []s Anderson Mello Compartilhar este post Link para o post Compartilhar em outros sites
David SP 0 Denunciar post Postado Março 5, 2007 Ola Anderson, Bom Dia!Desculpe a demora para lhe responder.Acertou na mosca cara. Funcionou.Muito obrigado.AbraçosDavid Compartilhar este post Link para o post Compartilhar em outros sites
rayfcrols 0 Denunciar post Postado Março 31, 2010 ola pessoal, primeiramente desculpe ressuscitar este assunto mais estou com um problema no qual v/c´s já ajudou outro companheiro David. no meu caso estou tentando importar alguns dados de formulário pre-impresso seguindo uma estrutura de 28 linhas por pessoa ou seja a cada 28 linhas uma nova "importação" como fazer isto? Meu script esta +- assim: $arquivo = basename({arquivo}); $caminho = $_SERVER['DOCUMENT_ROOT'] . "/gercoof_2/file/doc/".$arquivo; $conteudo = fopen($caminho, "r"); $i = 1; while (!feof ($conteudo)) { $controle = $i % 27; $linha = fgets($conteudo, filesize($caminho)); switch($controle) { case 1: $cnpj = substr($linha,10,18); $telefone = substr($linha,35,10); break; case 2: $razao = substr($linha,11,39); break; case 3: $ender = substr($linha,10,31); case 4: $bairro = substr($linha,8,8); $cidade = substr($linha,24,17); $uf = substr($linha,44,2); case 5: $lixo = $linha; echo nl2br($cnpj); echo nl2br($telefone); echo nl2br($razao); echo nl2br($ender); echo nl2br($bairro); echo nl2br($cidade); echo nl2br($uf); // $sql = "INSERT INTO teste (nome, endereco, telefone) VALUES ('$nome', '$endereco', '$telefone')"; //$result = mysql_query($sql) or die(mysql_error()); } $i++; } fclose ($conteudo); Compartilhar este post Link para o post Compartilhar em outros sites