Jump to content
Fórum Script Brasil
  • 0

Ajuda com Script para leitura de txt


Eduardo_iniciante_CDC
 Share

Question

 

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...