Jump to content


osvaldo luso's Content

There have been 20 items by osvaldo luso (Search limited from 30/03/2023)


Ordernar por                Order  

#990738 Chamar Pagina Dentro De Div

Posted by osvaldo luso on 23/12/2009, 21:59 in Ajax

[code=auto:0][/code]

Infelizmente ainda só funciona o IE 8 ,Mosila etc. Não funciona em IE < 8.


Consegui a solução. Basta inverter o parte do código.

Código original:
xmlRequest.onreadystatechange = mudancaEstado;  
xmlRequest.open("GET",url,true);  
xmlRequest.send(null);
Código invertido:
xmlRequest.open("GET",url,true);  
xmlRequest.onreadystatechange = mudancaEstado;
xmlRequest.send(null);

[code=auto:0][/code]


Infelizmente ainda só funciona o IE 8 ,Mosila etc. Não funciona em IE < 8.


Consegui a solução. Basta inverter o parte do código.

Código original:
xmlRequest.onreadystatechange = mudancaEstado;  
xmlRequest.open("GET",url,true);  
xmlRequest.send(null);
Código invertido:
xmlRequest.open("GET",url,true);  
xmlRequest.onreadystatechange = mudancaEstado;
xmlRequest.send(null);

Ah, A fonte é :Clique aqui



#990325 Chamar Pagina Dentro De Div

Posted by osvaldo luso on 18/12/2009, 11:12 in Ajax

Infelizmente ainda só funciona o IE 8 ,Mosila etc. Não funciona em IE < 8.



#990153 Chamar Pagina Dentro De Div

Posted by osvaldo luso on 16/12/2009, 16:04 in Ajax

Pessoal,

Estou tentando chamar uma página para dentro de uma DIV com ID =conteudo, contida na pagina index e só esta funcionando no IE-8/Mosila/Safari, mas não funciona em IEs mais antigos. Meu objetivo é carregar
as outras páginas dentro da pagina principal para evitar reload. Veja os codigos:


MENU:

[/html]<div class="menu_horizontal">
<ul>
<li><a href="#" onclick="abrirPag('index.php');">Página Inicial</a></li>
<li><a href="#" onclick="abrirPag('Fale_conosco.php');">Fale Conosco</a></li>
<li><a href="#" onclick="abrirPag('Programas.php');">Programas</a></li>
<li><a href="#" onclick="abrirPag('Quem_somos.php');">Quem Somos</a></li>
<li><a href="#" onclick="abrirPag('Historia.php');">História</a></li>
<li><a href="#" onclick="abrirPag('Equipe.php');">Equipe</a></li>
<li><a href="#" onclick="abrirPag('Links.php');">Links</a></li>
<li><a href="#" onclick="abrirPag('Locutores.php');">Locutores</a></li>
<li><a href="#" onclick="abrirPag('Ouvinte.php');">Ouvinte</a></li>
</ul>
</div>


Funcões JS:

function abrirPag(valor){ 
        var url = valor; 
 
        xmlRequest.onreadystatechange = mudancaEstado; 
        xmlRequest.open("GET",url,true); 
        xmlRequest.send(null); 
 
                if (xmlRequest.readyState == 1) { 
                        document.getElementById("conteudo").innerHTML = "<img src='loader.gif'>"; 
                } 
 
        return url; 
} 
 
function mudancaEstado(){ 
        if (xmlRequest.readyState == 4){ 
                document.getElementById("conteudo").innerHTML = xmlRequest.responseText; 
        } 
}

Ajax:

function GetXMLHttp() { 
        var xmlHttp; 
        try {                 
                xmlHttp = new XMLHttpRequest(); 
        } 
        catch(ee) { 
                try {   
                                             
                        xmlHttp = new ActiveXObject("Microsoft.XMLHttp"); 
                } 
                catch(e) { 
                        try {      
                                                             
                                xmlHttp = xmlhttp=new ActiveXObject("MSXML2.XMLHttp"); 
                        } 
                        catch(e) { 
                                    alert("Seu browser não suporta AJAX!");                                    
                                    xmlHttp = false; 
                                
                                
                                
                        } 
                } 
        } 
        return xmlHttp; 
} 
 
var xmlRequest = GetXMLHttp();


Já estou à duas semanas fazendo pesquisando e efetuando testes mas até agora não consegui descobrir o problema.
Não funciona em IEs < 8. Me ajudem por favor



#984706 Dúvidas Com Session

Posted by osvaldo luso on 27/10/2009, 23:59 in PHP

Não estou conseguindo criar sessão, alguém poderia me ajudar?
Tenho o form abaixo que chama o arquivo logar.php através do POST para
que o logar.php crie a sessão após validar os dados:

[codebox]<form name="form2" method="post" action="logar.php">
<div class="conteudo">
<h4> Bem vindo ao CST </h4>
<hr/>
</div class="login">
<div>
<table class="usuarios" cellspacing="12">
<tr>
<td>
Login :  
</td>
<td>
<input type="text" maxlength="8" name="login" id="campo1"size="12" />
</td>
</tr>
<tr>
<td>
Senha :  
</td>
<td>
<input type="password" maxlength="8" name="senha" id="campo2"size="14" />
<input type="submit" name="enviar_login" value="Entrar" onclick="return verifica()"/>
</td>
</tr>

</table>
</div>

</form>[/codebox]

Abaixo o arquivo logar.php que valida os dados do usuário e tenta criar a sessao:



[codebox]include "/inc/Conexao.php";
//cria a conexao com o banco
$mySQL = new Conexao_Mysql;

$login = $_POST['login'];
$senha = $_POST['senha'];


$sql_logar = "SELECT * FROM tblusuarios WHERE Login = '$login' && Senha = '$senha'";
$exe_logar = mysql_query($sql_logar) or die (mysql_error());
//$fet_logar = mysql_fetch_assoc($exe_logar);
$num_logar = mysql_num_rows($exe_logar);

if ($num_logar == 0)
{
echo "Login ou senha inválido.";
echo "<br> <a href='java script:window.history.go(-1)'> Clique aqui para voltar.</a>";
}
else
{
session_start();
$_SESSI0N['login'] = $login;
$_SESSI0N['senha'] = $senha;
header("Location:index.php");
}[/codebox]


A sessão não está sendo criada e não consigo descobrir onde está o erro. Por favor me ajudem.
Grato.



#982396 Indice De Multiplas Colunas

Posted by osvaldo luso on 01/10/2009, 00:09 in MySQL

Tudo bem, eu sei que o uso de índice otimiza as consultas. Eu só quis dizer que o USE INDEX é inútil em UPDATE (a doc. diz que aceita a sintaxe, mas não tem significado no UPDATE). O que lhe ajudou foi o SELECT para direcionar as possíveis linhas.

O que você pode fazer é melhorar o SELECT, pegando somente os registros que existem em A e B, e que o tipo não seja 4 para fazer o UPDATE.

SELECT B.Banco, B.Agencia, B.Numero, B.Valor
  FROM B FORCE INDEX (Procura)
	STRAIGHT_JOIN A
	ON A.Banco = B.Banco
	  AND A.Agencia = B.Agencia
	  AND A.Numero = B.Numero
	  AND A.Valor = B.Valor
  WHERE B.Tipo <> 4

E claro, se a tabela B é a que tem menos registros, é melhor utilizá-la para fazer a busca. Além do mais, como você está fazendo o UPDATE na B, é melhor guiar-se pela existência de registro nela, não na tabela A. Onde possivelmente está fazendo rodar vários UPDATE que não encontram linha alguma. (Não sei como estão os dados em ambas) Sem falar que você está apenas alterando para um valor fixo. Sem obter qualquer correspondente na outra tabela.

Gostei da sua sujestão. Vou implementá-la.

Muito obrigado!




#982267 Indice De Multiplas Colunas

Posted by osvaldo luso on 30/09/2009, 01:49 in MySQL

Seus updates estão muito lentos? A documentação do MySQL diz que você pode usar esses hints de índices, porém eles não serão usados em comandos UPDATE.

A instrução que lhe passei anteriormente já faz o "loop" de cada linha da tabela b e tenta encontrar os dados que batam na tabela a, se encontrar ele altera o tipo.



Com seu exemplo o tempo browser utrapassou 60 segundos e programa parou. Com o código abaixo o processamento
foi realizado em 9 segundos pois a localização utilizando indice é mais rapido, cfe doc Mysql:

$rsCheques = $mySQL->sql("SELECT  Banco, Agencia, Numero, Valor FROM A;");    while ($row_rsCheques = mysql_fetch_array($rsCheques))  {          $mySQL->sql("UPDATE B USE INDEX (Procura) SET Tipo = 4  WHERE   Banco = $row_rsCheques[0] AND Agencia = $row_rsCheques[1] AND Numero = $row_rsCheques[2] AND  Valor = $row_rsCheques[3] LIMIT(1);");    }

Desculpe mas gostaria de saber se tem forma ainda mais rápida pois as minhas tabela possuem mais de 60.000 linhas.
e o teste foi realizado com tabela de 30.000 linhas.



#982242 Indice De Multiplas Colunas

Posted by osvaldo luso on 29/09/2009, 21:43 in MySQL

Ops, desconsidere minha resposta anterior. Eu estava pensando em outra coisa. :P

Enfim, então você quer atualizar os registros da tabela B onde exista na tabela A, checando isso por: banco + agencia + nr_cheque e valor.

Então ficaria, por exemplo:

update b, a set b.tipo = 4 where (b.banco, b.agencia, b.nr_cheque, b.valor) = (a.banco, a.agencia, a.nr_cheque, a.valor);


Consegui localizar e atualizar conforme abaixo. A sintaxe para utilização de índice composto está correta????:

$rsCheques = $mySQL->sql("UPDATE B USE INDEX (Procura30) SET Tipo = 4  WHERE   Banco = 1 AND Agencia = 32 AND Numero = 850518 AND Valor = 2493.00;");

Então gostaria de saber como faço para receber os dados da tabela "A" através de um loop e atualizar os dados em "B" de
forma que quando terminar de percorrer a tabela "A" todos os dados localizados em "B" estarão atualizados.



#982221 Indice De Multiplas Colunas

Posted by osvaldo luso on 29/09/2009, 19:34 in MySQL

Basta você usar na query os campos que compõe o índice, lembrando que você precisa ter no mínimo o campo mais a esquerda do índice composto para que ele possa ser usado.


Na realidade, no momento em que o registro for encontrado na tabela "B" este deverá ser editado e seu campo chamado
"Tipo" receberá "4". Ou seja, o programa deve percorrer a tabela "A", ler seus registro um a um, comparar com cada
registro da tabela "B" através do índice "Procura" e se localizar deverá editá-lo na "B", inserindo "4" no campo "Tipo".
Alguem poderia me enviar um modelo desse script?? Grato.



#982095 Indice De Multiplas Colunas

Posted by osvaldo luso on 28/09/2009, 22:39 in MySQL

Pessoal,
No Mysqk consigo localizar um registro em uma table que possui indice composto por várias colunas?
ex:
Tenho um índice na table "B" que se chama "Procura" e este indice é composto pelos campos
Banco - Agencia - Nr_Cheque e Valor. Preciso que o programa leia a tabela "A" e localize o
a informação na table "B" através do índice citado. Como fazer?? Ah, as tables possui milhares
de registros.



#982094 Mysql - Indice De Multiplas Colunas

Posted by osvaldo luso on 28/09/2009, 22:32 in PHP

Pessoal,

Tenho uma tabela que possui um indice composto por quatro colunas:
Banco - Agencia - Nr_Cheque - Valor. O programa deve comparar a tabela "A" que possui milhares de
linhas com a tabela "B" (a possui o indice de multiplas colunas e milhares de linhas também). O que eu preciso
é que o programa receba as informações de um cheque da table "A" e o localize
na table "B" utilizando o indice. Ah o índice chama-se "Procura". Como fazer isto??



#982093 Instrução Load Data Infile

Posted by osvaldo luso on 28/09/2009, 22:19 in PHP

Pessoal

O que estou tentando fazer é pegar as posiçoes "(/d{8})" que são textos (20090815) e formatá-las para "2009/08/15" no momento de gerar o arquivo csv. Quando eu realizar a importação do arquivo csv para o BD as informações referentes as esses campos no arquivo seriam gravadas no banco nas coluna "Data_liquidacao" e " Data_Processamento" respectivamente, que são do tipo Date. Deste forma acretido que eu não precisaria realizar a formatação depois
de gravada no BD.

Opa,

Sim, mas veja bem: o formato do campo DATE é YYYY-MM-DD. Você pode inserir como YYYY/MM/DD sem problemas. Mas ao receber os dados você receberá YYYY-MM-DD. A formatação vem na própria consulta mesmo, em todo caso. No caso do CSV, os dados estão no formato YYYYMMDD, sem os traços. Mas para o MySQL, que só "enxerga" os dígitos, não há nenhum problema. Veja como é fácil fazer isso na própria consulta:

SELECT DATE_FORMAT('%d/%m/%Y', Data_Liquidacao) AS Data_Liquidacao FROM `tblcxq902`;
Neste caso, se você tiver 2009-08-15 no banco de dados, a data será apresentada como 15/08/2009 no PHP. :)

[]’s



Valeu Paulo!

Funcionou perfeitamente.
Obrigado



#981800 Instrução Load Data Infile

Posted by osvaldo luso on 25/09/2009, 20:14 in PHP

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.

Olá,

Bem, a dica do Felipe procede. O mais adequado seria você gravar as datas num campo DATE, que usa este mesmo formato padrão YYYYMMDD (ano/mês/dia). Assim você poderá efetuar consultas baseadas em intervalos, além de poder usar todas funções de data e tempo do MySQL. Se você precisar da data no formato brasileiro na exibição, basta formatá-la com a função DATE_FORMAT(). Se precisar de ajuda no uso de sua sintaxe, é só dizer! :)

Está convencido? :P

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.

Mas como faço para NÃO inserir as informações localizadas após o último
"(/d{8})" no arquivo csv. Tem quebra de linha no arquivo texto, neste ponto e essas informações são inseridas não me interessam.

Eita! São só quebras de linha que vêm após a última data? No código já estamos usando a função trim(), que deveria estar servindo justamente para isso. :ponder:

Ao menos no teste local que eu fiz estava tudo Ok. Me confirme quais caracteres aparecem após a última data. (y)

[]’s


Pessoal

O que estou tentando fazer é pegar as posiçoes "(/d{8})" que são textos (20090815) e formatá-las para "2009/08/15" no momento de gerar o arquivo csv. Quando eu realizar a importação do arquivo csv para o BD as informações referentes as esses campos no arquivo seriam gravadas no banco nas coluna "Data_liquidacao" e " Data_Processamento" respectivamente, que são do tipo Date. Deste forma acretido que eu não precisaria realizar a formatação depois
de gravada no BD.



#981671 Instrução Load Data Infile

Posted by osvaldo luso on 25/09/2009, 01:17 in PHP

Olá Osvaldo, esta operação não é aconselhável. Principalmente se você for realizar busca entre datas na tabela usando tal campo.


Vou tratar as datas dentro do BD. Mas como faço para NÃO inserir as informações localizadas após o último
"(/d{8})" no arquivo csv. Tem quebra de linha no arquivo texto, neste ponto e essas informações
são inseridas não me interessam.



#981269 Instrução Load Data Infile

Posted by osvaldo luso on 24/09/2009, 21:49 in PHP

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.

Opa,

Estou certo de que tenha seguido minha orientação. Porém, perdão, eu errei! :P

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 o LOCAL deve vir após o LOAD DATA, sendo portanto LOAD DATA LOCAL. Outro problema é o ponto-vírgula no lugar da vírgula em FIELDS TERMINATED BY. Eu já tinha "arrumado" mas acho que tu não percebeu. :D

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. (y)

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,

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.

Opa,

Estou certo de que tenha seguido minha orientação. Porém, perdão, eu errei! :P

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 o LOCAL deve vir após o LOAD DATA, sendo portanto LOAD DATA LOCAL. Outro problema é o ponto-vírgula no lugar da vírgula em FIELDS TERMINATED BY. Eu já tinha "arrumado" mas acho que tu não percebeu. :D

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. (y)

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                              ));



#981090 Instrução Load Data Infile

Posted by osvaldo luso on 22/09/2009, 00:37 in PHP

Paulo,
Aí está o formato da primeira linha:
017082009091619080000000000CXQ90200000
Só preciso da posição 6 a 13 (data) e da 28 a 33 (nome interno do arquivo). A última linha não me interessa.

Dúvidas:

-Mesmo tendo especificado o caminho para criar o .csv conforme abaixo, o mesmo foi criado em "Meus documentos" com os delimitadores. No caminho especificado foi criada uma planilha com os dados separados em celulas diferentes. Como
faço para que o arquivo com os delimitadores seja criado na pasta desejada?
$csv = fopen('c:/CST/cxq9021509.csv', 'w');

-Como faço para especificar os nomes dos campos da tabela no LOAD DATA INFILE?

Grato.

Vamos lá, por partes:

Como a primeira linha você só precisa de duas informações, elas não entrarão no arquivo com delimitadores, certo? Errado? Presumo que você irá usar estas informações em outro lugar, certo? Errado? Estou assumindo minha suposição:

<?php

$csv = fopen('cxq9021509.csv', 'w');
$txt = file('cxq9021509.txt');

array_pop($txt); // apaga a última linha (:

foreach ($txt as $line => $entry) {
	if ($line == 0) { // guarda a data em $date e o nome interno do arquivo em $filename se for a primeira linha
		list($date, $filename) = preg_split(
			'{\d{5}(\d{8})\d{14}(\w{6})\d{5}}',
			trim($entry),
			0,
			PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE
		);  
	} else {
		fputcsv($csv, preg_split(
			'{\d{2}(\d{3})(\d{4})(\d{6})(\d{8})\d(\d{4})(\d{7})(\d{4})\d(\d{17})\d(\d{17})}',
			trim($entry),
			0,
			PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE
		));
	}
}

fclose($csv);

?>

Veja que guardei as duas informações da primeira linha em variáveis. ;)

Quanto ao caminho para criar o CSV, tente assim:

$csv = fopen('C:\\CST\\cxq9021509.csv', 'w'); // no Windows as barras são invertidas; no PHP elas precisam ser escapadas

Quanto a especificar os nomes dos campos da tabela no comando LOAD DATA, seria logo após do nome da tabela, entre parênteses, assim:

LOAD LOCAL DATA INFILE 'C:/CST/cxq9021509.txt' INTO TABLE tblcxq902 (col1, col2, col3, col4, col5, col6, col7, col8, col9) FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'

Segue a documentação oficial do LOAD DATA: http://dev.mysql.com.../load-data.html (y)

[]’s



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.



#980760 Instrução Load Data Infile

Posted by osvaldo luso on 19/09/2009, 01:19 in PHP

Prezado Paulo,

Seu código realmente é muito eficiente, pois consegui separar os campos do meu .txt de forma muito veloz. Todavia
gostaria de esclarecer algumas dúvidas:
- A primeira linha e a última linha não possuem o mesmo comprimento das demais e a informação que me interessa
na primeira linha é da posição 6 até a posição 13 e da última linha, nenhuma informação. Tem como adaptar seu
código para corrigir este problema?
- A tabela tem tblcxq902 tem que possuir a mesma quantidade de campos que o arquivo?

Sou iniciante e tenho certeza que vcs irão me ajuda muito.


Abraço e muito grato pela ateñção.

Que bom que tenha servido! :)

Dá pra adaptar o código sim. Bem, a última linha podemos apenas ignorar. Como será o formato da primeira? :)

Quanto a tabela dever possuir a mesma quantidade dos arquivos, não necessariamente. Você pode ter mais campos na tabela. Neste caso, você especifica os campos onde irá inserir os dados (estes sim deverão ter a mesma quantidade de campos do arquivo CSV). ;-)

[]’s



Paulo,
Aí está o formato da primeira linha:
017082009091619080000000000CXQ90200000
Só preciso da posição 6 a 13 (data) e da 28 a 33 (nome interno do arquivo). A última linha não me interessa.

Dúvidas:

-Mesmo tendo especificado o caminho para criar o .csv conforme abaixo, o mesmo foi criado em "Meus documentos" com os delimitadores. No caminho especificado foi criada uma planilha com os dados separados em celulas diferentes. Como
faço para que o arquivo com os delimitadores seja criado na pasta desejada?
$csv = fopen('c:/CST/cxq9021509.csv', 'w');

-Como faço para especificar os nomes dos campos da tabela no LOAD DATA INFILE?

Grato.



#980743 Instrução Load Data Infile

Posted by osvaldo luso on 18/09/2009, 22:25 in PHP

Paulo,

É muito agradável participar de uma comunidade a qual possui pessoas tão prontas a ajudar. Segue abaixo um exemplo
de uma linha com as devidos campos separados. Todavia observe que não necessito de todas as informações da linha (
são os que estão fora dos parênteses).
01(001)(0025)(000251)(61850111)0(0025)(4390010)(0025)0(27000765700850589)0(00000000001580000)

Sinta-se em casa. :D

Bem, com campos opcionais o código que eu havia em mente muda um pouco. A idéia é a seguinte: você informa o arquivo de texto e a função cria um arquivo de dados delimitados (CSV), fazendo com que este sim seja importado pelo MySQL.

Essa conversão seria algo assim:

<?php

$csv = fopen('cxq9021509.csv', 'w'); // arquivo com os dados limitados que iremos criar

foreach (file('cxq9021509.txt') as $entry) { // aqui percorremos o arquivo de texto que já existe
	fputcsv(
		$csv,
		preg_split(
			'{\d{2}(\d{3})(\d{4})(\d{6})(\d{8})\d(\d{4})(\d{7})(\d{4})\d(\d{17})\d(\d{17})}',
			trim($entry),
			0,
			PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE
		)
	);
}

fclose($csv);

?>
Peguei essa linha sua de 75 caracteres e a multipliquei 50 mil vezes, resultando num arquivo de texto de 3,6 MB. Então rodei este código, que foi executado em 2 segundos, gerando um arquivo CSV de 3,8 MB. Isto é, a transformação necessária do arquivo levou 2 segundos. Agora ele já pode o comando LOAD LOCAL DATA INFILE do MySQL exatamente como você estava fazendo, apenas trocando a extensão .txt por .csv. :)

Isso resolve seu problema?

[]’s



Prezado Paulo,

Seu código realmente é muito eficiente, pois consegui separar os campos do meu .txt de forma muito veloz. Todavia
gostaria de esclarecer algumas dúvidas:
- A primeira linha e a última linha não possuem o mesmo comprimento das demais e a informação que me interessa
na primeira linha é da posição 6 até a posição 13 e da última linha, nenhuma informação. Tem como adaptar seu
código para corrigir este problema?
- A tabela tem tblcxq902 tem que possuir a mesma quantidade de campos que o arquivo?

Sou iniciante e tenho certeza que vcs irão me ajuda muito.


Abraço e muito grato pela ateñção.



#980524 Instrução Load Data Infile

Posted by osvaldo luso on 17/09/2009, 22:40 in PHP

Bom, pode-se usar a função substr() para pegar grupos de caracteres.

Até mais ^_^


Dudu
Obrigado pela ajuda, mas com substr() o processamento fica muito lento, pois a cada iteração deverá ser feito um
update no BD.



#980509 Instrução Load Data Infile

Posted by osvaldo luso on 17/09/2009, 20:46 in PHP

Olá,

Primeiramente, seja bem-vindo à nossa comunidade. É um prazer tê-lo aqui. :)

Bem, antes de usar essa instrução do MySQL você terá que inevitavelmente separar estes dados do arquivo. Teria como dizer exatamente todas as separações que deseja? Até o momento temos isso:

(001)(0025)(000251)618501110002543900100025027000765700850589000000000001580000

Dá para criar um script PHP bem prático e pequeno capaz de efetuar essa edição, podendo assim usar este recurso do MySQL que realmente é muito mais ágil do que executar quase 50.000 consultas.

[]’s



Paulo,

É muito agradável participar de uma comunidade a qual possui pessoas tão prontas a ajudar. Segue abaixo um exemplo
de uma linha com as devidos campos separados. Todavia observe que não necessito de todas as informações da linha (
são os que estão fora dos parênteses).
01(001)(0025)(000251)(61850111)0(0025)(4390010)(0025)0(27000765700850589)0(00000000001580000)



#980379 Instrução Load Data Infile

Posted by osvaldo luso on 17/09/2009, 00:44 in PHP

Necessito criar um procedimento que importe um arquivo texto para uma tabela do Mysql. Porém este arquivo não
possui delimitadores, ou seja, linha de tamanho fixo. Em pesquisa descobri que a instrução LOAD DATA INFILE é capaz
de realizar uma importação em velocidade muito alta (meu arquivo tem aproxidamente 50000 linhas). Segue abaixo
uma linha do arquivo:
0010025000251618501110002543900100025027000765700850589000000000001580000
Da coluna 1 até a 3 é o numero do banco,
da 4 até 7 é o prefixo da agencia,
da 8 até 13 é a conta, e assim por diante.

Tenho um método chamado sql que executa a query que passo como parâmetro e abaixo segue um exemplo de
LOAD DATA INFILE que achei, mas não é para arquivos sem delimitadores. Alguém saberia me dizer quais as
alterações que devo fazer para conseguir importar meu arquivo????:

$rsCheques = $mySQL->sql("LOAD LOCAL DATA INFILE 'c:/CST/cxq9021509.txt' INTO TABLE tblcxq902 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' ");




IPB Skin By Virteq