Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com Script para leitura de txt


Eduardo_iniciante_CDC

Pergunta

 

Olá boa tarde!!

 

Estou desenvolvenodo um aplicativo que visa abrir um arquivo txt, que esta dividido da seguinte maneira

|a500|50|50|45|a|1|2

|a110|50|50|45|a|1|2

|a250|50|50|45|a|1|2

|a500|50|50|45|a|1|2

|a110|50|50|45|a|1|2

Abrir o arquivo já consegui, abro ele depois devo quebralo em uma array de posiçoes, usei o explode assim coloquei oque esta entre pipes dentro de cada posição do array.

porem agora necessito pegar os dados de uma determinada linha e colocar no banco, porem não é qualquer linha imagine a seguinte situação o primeiro item entre pipes de cada linha significa a tabela que devo inserir os proximos registro da mesma linha.

 

ou seja pegamos a primeira linha a500 é a tabela onde insermos os dados que vamos inserir são 50, 50, 45, a, 1, 2; depois vamos verificando o arquivo ate encontrar o proximo a500 e fazer a mesma operação, para que depois com outra função verificamos os demais como o a250 depois o a110.

 

Agora vem o probleminha ate consigo achar o primeiro verificador com um if, porem quando chego nele pego os dados como falei ali em cima coloco no banco, porem ele não continua ate o fim da array ele para na primeira vez que encontra o digito que verifica e não continua mais, já tentei coloca um continue; no fm para ver se ele sai do if e continua o for que fiz enfim, so falta isso, vou colocar o codigo ai embaixo para vocês verificarem se podem me dar umas dicas.

Aqui é onde chamo as funçoes

<?php
	include_once("banco/conexao.php");
	include_once("banco/funcoes.php");

	$arquivo = $_FILES['txt'];
	$nome = $_FILES['txt']['name'];
	$nome_temporario = $_FILES['txt']['tmp_name'];
	$erros = $_FILES['txt']['error'];

	upload($arquivo, $nome, $nome_temporario, $erros);
	$sped = analise($nome);
	InserirA100($conexao, $sped);

?>
<?php

	//IMPORTAÇÃO E SEPARAÇÃO DO ARQUIVO
	function upload($arquivo, $nome, $nome_temporario, $erros){
		if($erros == 0){
			$pasta = 'arquivos/';
			move_uploaded_file($nome_temporario, $pasta . $nome);	
		}
		else{
			echo("Erro encontrado duranteo upload do arquivo tente novamnete!!");
		}
	}
	//QUEBRA ARQUIVO TXT ENTRE AS PIPES
	function analise($nome){
		$sped = file_get_contents("arquivos/$nome");
		$array = explode("|", $sped);
		return $array;
	}

	//COLOCA A100 EM BANCO
	function InserirA100($conexao, $sped){
		set_time_limit(60);
		$cont = count($sped);
		for($i=0;$i<=$cont;$i++){
			$contador = 0;
			if($sped[$i] == "A100"){
				$inicial = $i;
					$bloco = $sped[$inicial];
					$operacao = $sped[$inicial+1];
					$emitente = $sped[$inicial+2];
				$query = ("insert into a100 (bloco, operacao, emitente) values ('{$bloco}', {$operacao}, {$emitente})");
				return mysqli_query($conexao, $query);
				
		}
		}
	}


?>

Neste ai de cima faz tudo oque mencionei, e ai podem me ajudar??

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá!
Segue sugestão para solução:

<?php

// carrega o conteúdo do arquivo:
$arquivo = file('arquivo.txt');

// remover linhas vazias e agrupar dados por tabela(primeiro item de cada linha)
foreach ($arquivo as $key => $value) {
    // remover espaços em branco
    $value = trim($value);
    // se a linha não for vazia
    if (!empty($value)) {
        // quebra os dados nas pipe bars
        $data = explode('|', trim($value, '|'));
        // separa o nome da tabela dos outros dados
        $tableName = array_shift($data);
        // percorre o array $dada
        foreach ($data as $k => $v) {
            // coloca aspas simples apenas se não for valor numérico:
            $data[$k] = is_numeric($v) ? $v : "'$v'";
        }
        // adiciona valores separados por vírgula ao array $inserts
        $inserts[$tableName][] = implode(',', $data);
    }
}
// montar queries de inserção:
foreach ($inserts as $table => $data) {
    // define início da query
    $startQuery = "INSERT INTO $table(bloco, operacao, emitente) VALUES \n";
    // Criar um insert com no máximo 50 registros:
    $registers = array_chunk($data, 50, true);
    // percorre os registros
    foreach ($registers as $v) {
        // adiciona a query montada ao array $values
        $values[] = $startQuery . '(' . implode("),\n(", $v) . ');';
    }
}
echo '<pre>';
print_r($values); // mostra o conteúdo de $values na tela:
echo '</pre>';

Resultado:

Array
(
    [0] => INSERT INTO a500(bloco, operacao, emitente) VALUES 
           (50,50,45,'a',1,2),
           (50,50,45,'a',1,2);
    [1] => INSERT INTO a110(bloco, operacao, emitente) VALUES 
           (50,50,45,'a',1,2),
           (50,50,45,'a',1,2);
    [2] => INSERT INTO a250(bloco, operacao, emitente) VALUES 
           (50,50,45,'a',1,2);
)
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...