Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala pessoal!
Faz alguns anos que não apareço por aqui já, até porque parei de mexer totalmente com web, to totalmente enferrujado. Olha, tentei fazer uma pesquisa, mas não encontrei nada, até porque não sei como procurar. Tenho um extrato do Bradesco que as linhas vem assim (tá vindo do banco de dados):
CARGA CARTAO TRANSPORTES 549018 45,60CARGA CARTAO TRANSPORTES 764010 432,79 CARGA CARTAO TRANSPORTES 764010 749,21 CARGA CARTAO TRANSPORTES 957010 829,00 CARGA CARTAO TRANSPORTES 1114017 67,20 CARGA CARTAO TRANSPORTES 1602013 4,20 CARGA CARTAO TRANSPORTES 1602013 403,00 CARGA CARTAO TRANSPORTES 1638017 198,49 CARGA CARTAO TRANSPORTES 1638017 780,58 CARGA CARTAO TRANSPORTES 1646010 588,34
Obs = tudo isso vem de um único campo, não tá cada informação numa linha do BD.
O que acontece, como eu posso fazer pra tirar só a coluna de autorização (que no caso ali seria 549018 por ex.) e o valor (45,60)? Precisava tirar esses numeros para inserir numa tabela, e fazer a mesma coisa na linha de baixo. Teria que ser um loop, são mais de 200 linhas em cada extrato...
Alguém consegue mandar uma dica de como posso fazer?
Sei que com a função substr() eu consigo tirar a parte que preciso... Mas como faço o loop, pra passar pra linha de baixo até acabarem todas? =/
Obrigado!
Mangakah, desculpe a demora para agradecer, dessa forma deu certo!
Só to com um outro problema. Se eu puxar direto do banco de dados dá erro... Só pra tentar dar um exemplo pra entender melhor:
Conteúdo do bd (campo extrato (que está em formato texto)):
>
Ag?ncia:6349 Conta:35217-9
MOVIMENTAÇ?O DO PERÍODO - CONTA CORRENTE
DATA HISTÓRICO DOCTO CRÉDITO DÉBITO SALDO
28/06/13 SALDO ANTERIOR xxx
01/07/13 TRANSF CC PARA CC PJ 6349929 xx
RODOAC TRANSPORTE DE CARGAS
LTDA
TARIFA BANCARIA 549018 0,23
TARIFA CARGA TRANSPORTE
TARIFA BANCARIA 560014 0,14
TARIFA CARGA TRANSPORTE
TARIFA BANCARIA 560014 4,00
TARIFA CARGA TRANSPORTE
TARIFA BANCARIA 764010 2,16
TARIFA CARGA TRANSPORTE
TARIFA BANCARIA 801011 0,24
TARIFA CARGA TRANSPORTE
DATA HISTÓRICO DOCTO CRÉDITO DÉBITO SALDO
TARIFA BANCARIA 9965010 2,36
TARIFA CARGA TRANSPORTE
CARGA CARTAO TRANSPORTES 549018 45,60
CARGA CARTAO TRANSPORTES 764010 432,79
CARGA CARTAO TRANSPORTES 764010 749,21
CARGA CARTAO TRANSPORTES 957010 829,00
CARGA CARTAO TRANSPORTES 1114017 67,20
CARGA CARTAO TRANSPORTES 1602013 4,20
CARGA CARTAO TRANSPORTES 1602013 403,00
CARGA CARTAO TRANSPORTES 1638017 198,49
(Isso porque gero um .txt no site do banco e já manda isso, aí só copio e colo pro BD).
Bom, vamos lá... Se eu colocar o código abaixo:
<?php
$consulta = mysql_query("SELECT * FROM ext_int WHERE id='3'");
$dados = mysql_fetch_array($consulta);
$extrato = $dados["extrato"];
$trecho = strpos($extrato, "CARGA CARTAO TRANSPORTES ");
$extrato = substr($extrato, $trecho);
$extrato = nl2br($extrato);
echo"$extrato";
?>
O retorno é:
CARGA CARTAO TRANSPORTES 549018 45,60CARGA CARTAO TRANSPORTES 764010 432,79 CARGA CARTAO TRANSPORTES 764010 749,21 CARGA CARTAO TRANSPORTES 957010 829,00 CARGA CARTAO TRANSPORTES 1114017 67,20 CARGA CARTAO TRANSPORTES 1602013 4,20 CARGA CARTAO TRANSPORTES 1602013 403,00 CARGA CARTAO TRANSPORTES 1638017 198,49
Bom, então dando sequência, código completo agora:
<?php
$consulta = mysql_query("SELECT * FROM ext_int WHERE id='3'");
$dados = mysql_fetch_array($consulta);
$extrato = $dados["extrato"];
$trecho = strpos($extrato, "CARGA CARTAO TRANSPORTES ");
$extrato = substr($extrato, $trecho);
$extrato = nl2br($extrato);
$linhas = explode("\n", $extrato);
foreach ($linhas as $linha) {
// dividir cada linha em colunas
$colunas = array_combine(array('coluna1', 'coluna2', 'coluna3', 'autorizacao', 'valor'), explode(" ", $linha));
// Colocar os valores desejados na consulta SQL
$sql = mysql_query("INSERT INTO extratos (data, autorizacao, valor) VALUES('2013-07-02', '{$colunas['autorizacao']}', '{$colunas['valor']}')");
}
?>
O retorno é:
>
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\AppServ\www\rodoac\pedagio\teste_exp_extrato.php on line 24
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\AppServ\www\rodoac\pedagio\teste_exp_extrato.php on line 24
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\AppServ\www\rodoac\pedagio\teste_exp_extrato.php on line 24
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\AppServ\www\rodoac\pedagio\teste_exp_extrato.php on line 24
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\AppServ\www\rodoac\pedagio\teste_exp_extrato.php on line 24
Agora se eu colocar aquele retorno ali de cima, DIRETO NO CÓDIGO, dá certinho...
****
<?php
$extrato = "CARGA CARTAO TRANSPORTES 549018 45,60
CARGA CARTAO TRANSPORTES 764010 432,79
CARGA CARTAO TRANSPORTES 764010 749,21
CARGA CARTAO TRANSPORTES 957010 829,00
CARGA CARTAO TRANSPORTES 1114017 67,20
CARGA CARTAO TRANSPORTES 1602013 4,20
CARGA CARTAO TRANSPORTES 1602013 403,00
CARGA CARTAO TRANSPORTES 1638017 198,49";
$linhas = explode("\n", $extrato);
foreach ($linhas as $linha) {
// dividir cada linha em colunas
$colunas = array_combine(array('coluna1', 'coluna2', 'coluna3', 'autorizacao', 'valor'), explode(" ", $linha));
// Colocar os valores desejados na consulta SQL
$sql = mysql_query("INSERT INTO extratos (data, autorizacao, valor) VALUES('2013-07-04', '{$colunas['autorizacao']}', '{$colunas['valor']}')");
}
?>
****
Dessa forma funciona certinho!!
Mas o que posso fazer?? O retorno do BD é exatamente igual o que tá na string $extrato, mas não vai...
Desculpem minha ignorância, eu to há anos sem mexer com isso, e se já era burro antes, to mais ainda agora... Não to conseguindo me acertar... :(
Aqui você converte NL (new line ou line feed, que é representado graficamente por [inline]\n[/inline], em "<br>". Mas depois o NL é requisitado para "quebrar" a string em linhas.
$extrato = nl2br($extrato);
$linhas = explode("\n", $extrato);
Tente remover essa conversão ou alterar o primeiro parâmetro do explode para "<br>".
Se mesmo assim estiver dando erro, tente fazer o seguinte logo antes da função array_combine:
var_dump($linha); die();
E poste o resultado aqui (obs.: copie o texto pelo código fonte da página).
Isso você quis dizer??
$trecho = strpos($extrato, "CARGA CARTAO TRANSPORTES ");
$extrato = substr($extrato, $trecho);
$extrato = nl2br($extrato);
$linhas = explode("<br>", $extrato);
foreach ($linhas as $linha) {
// dividir cada linha em colunas
var_dump($linha); die();
$colunas = array_combine(array('coluna1', 'coluna2', 'coluna3', 'autorizacao', 'valor'), explode(" ", $linha));
Retorno foi esse (pelo código fonte, como pediu, isso?):
>
string(673) "CARGA CARTAO TRANSPORTES 549018 45,60<br /> CARGA CARTAO TRANSPORTES 764010 432,79<br /> CARGA CARTAO TRANSPORTES 764010 749,21<br /> CARGA CARTAO TRANSPORTES 957010 829,00<br /> CARGA CARTAO TRANSPORTES 1114017 67,20<br /> CARGA CARTAO TRANSPORTES 1602013 4,20<br /> CARGA CARTAO TRANSPORTES 1602013 403,00<br /> CARGA CARTAO TRANSPORTES 1638017 198,49"
Ops... é "<br />" e não "<br>".
Mas o melhor mesmo é você remover isso:
$extrato = nl2br($extrato);
E deixar o \n
Deixando assim:
$extrato = nl2br($extrato);
$linhas = explode("<br />", $extrato);
O retorno foi:
string(66) "CARGA CARTAO TRANSPORTES 549018 45,60"
E tirando o nl2br e deixando só o \n no explode:
$linhas = explode("\n", $extrato);
O retorno foi exatamente o mesmo!
---
Desculpa a ignorância... juro que não é folga querer mastigado, mas que to sem saber nem como pesquisar...
Remova o var_dump($linha); die(); agora e veja se dar certo.
Remova o var_dump($linha); die(); agora e veja se dar certo.
Fiz isso, mas aí voltou exatamente como tava antes, que coloquei no terceiro post... Retorna o erro:
>
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\AppServ\www\rodoac\pedagio\teste_exp_extrato.php on line 26
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\AppServ\www\rodoac\pedagio\teste_exp_extrato.php on line 26
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\AppServ\www\rodoac\pedagio\teste_exp_extrato.php on line 26
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\AppServ\www\rodoac\pedagio\teste_exp_extrato.php on line 26
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\AppServ\www\rodoac\pedagio\teste_exp_extrato.php on line 26
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\AppServ\www\rodoac\pedagio\teste_exp_extrato.php on line 26
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\AppServ\www\rodoac\pedagio\teste_exp_extrato.php on line 26
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\AppServ\www\rodoac\pedagio\teste_exp_extrato.php on line 26
Ficou assim:
$consulta = mysql_query("SELECT * FROM ext_int WHERE id='5'");
$dados = mysql_fetch_array($consulta);
$extrato = $dados["extrato"];
$trecho = strpos($extrato, "CARGA CARTAO TRANSPORTES ");
$extrato = substr($extrato, $trecho);
$linhas = explode("\n", $extrato);
foreach ($linhas as $linha) {
// dividir cada linha em colunas
$colunas = array_combine(array('coluna1', 'coluna2', 'coluna3', 'autorizacao', 'valor'), explode(" ", $linha));
// Colocar os valores desejados na consulta SQL
$sql = mysql_query("INSERT INTO extratos (data, autorizacao, valor) VALUES('2013-07-04', '{$colunas['autorizacao']}', '{$colunas['valor']}')");
}
:(Bom dia, Leia atentamente o erro que esta dando:
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\AppServ\www\rodoac\pedagio\teste_exp_extrato.php on line 26
Mais especificamente: Both parameters should have an equal number of elements in isso quer dizer que não é possivel utilizar a função para combinar pois o numero de colunas que esta vindo é diferente, ou seja quando você da o explode(" ",$linha) esta vindo mais colunas que array('coluna1', 'coluna2', 'coluna3', 'autorizacao', 'valor'), isto deve estar acontecendo devido a haver um espaço em branco a mais, muito provavelmente no final da linha, bem ao invés de tentar contornar isso retirando o espaço, aconselho a buscar pelo numero da coluna ex:
$consulta = mysql_query("SELECT * FROM ext_int WHERE id='5'");
$dados = mysql_fetch_array($consulta);
$extrato = $dados["extrato"];
$trecho = strpos($extrato, "CARGA CARTAO TRANSPORTES ");
$extrato = substr($extrato, $trecho);
$linhas = explode("\n", $extrato);
foreach ($linhas as $linha) {
// dividir cada linha em colunas
$colunas = explode(" ", $linha));
// Colocar os valores desejados na consulta SQL
$sql = mysql_query("INSERT INTO extratos (data, autorizacao, valor) VALUES('2013-07-04', '{$colunas[3]}', '{$colunas[4]}')");
}
<?php
// Exemplo de dados
$extrato = "CARGA CARTAO TRANSPORTES 549018 45,60
CARGA CARTAO TRANSPORTES 764010 432,79
CARGA CARTAO TRANSPORTES 764010 749,21
CARGA CARTAO TRANSPORTES 957010 829,00
CARGA CARTAO TRANSPORTES 1114017 67,20
CARGA CARTAO TRANSPORTES 1602013 4,20
CARGA CARTAO TRANSPORTES 1602013 403,00
CARGA CARTAO TRANSPORTES 1638017 198,49
CARGA CARTAO TRANSPORTES 1638017 780,58
CARGA CARTAO TRANSPORTES 1646010 588,34";
// Colocar cada linha em um elemento de array
Saída: