PHP - Bucle importar txt a mysql con php

 
Vista:

Bucle importar txt a mysql con php

Publicado por GaryHost (1 intervención) el 18/04/2018 14:10:03
Hola a todos, a ver si me podéis echar una manita.

Estoy importando un fichero de texto con php a una base de datos MySQL.

La estructura del archivo de texto es la siguiente:
1
2
3
CODIGO]CPTO]IMPORTE    ]Diferencia   ]
00015]001ý099ý203]70000ý-13650ý4995]]
00096]001ý098]84142ý-16407.69]ýýýýýýýýýýý-3005]
Y la estructura de la tabla es
1
2
3
4
5
6
7
8
9
`tLineasPendientesPruebas` (
  `id` int(11) NOT NULL,
  `idContratos` int(11) NOT NULL,
  `idConceptosMaestra` int(11) NOT NULL,
  `importe` float NOT NULL,
  `fechaAlta` datetime NOT NULL,
  `fechaCobro` datetime NOT NULL,
  `factura` tinyint(1) NOT NULL,
  `observacion` text

Os explico: en el archivo de textoi el campo CÓDIGO se corresponde con idContratos.
El campo CPTO puede tener 0, 1 o varios valores que corresponden con el campo DIFERENCIA del archivo de texto y están separados por "ý".
Además a veces un valor de un campo se corresponde con otro vacío en el otro.

Necesito el algoritmo para lea esa línea, y en caso de que existan varios valores en dichos campos, cree un registro en la BBDD para cada uno de ellos con el mismo campo CÓDIGO en el atributo idContratos.

Es decir, si tengo esto: 00015]001ý099ý203]70000ý-13650ý4995]]
Lo tengo que convertir en: 00015]001]70000]
00015]099]13650]
00015]203]4995]
Para insertarlo como:
INSERT [...] VALUES (NULL, '00015', '001', ]70000, '2018-04-18 00:00:00', '2018-04-18 00:00:00', '0', '$observaciones')";
INSERT [...] VALUES (NULL, '00015', '099', ]13650, '2018-04-18 00:00:00', '2018-04-18 00:00:00', '0', '$observaciones')";
INSERT [...] VALUES (NULL, '00015', '203', ]4995, '2018-04-18 00:00:00', '2018-04-18 00:00:00', '0', '$observaciones')";

Mi código hasta ahora solo lee el archivo y lo inserta tal cual, ignorando los valores que vienen detrás del primer separador "ý".

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$filas=file('datos.txt');
    foreach($filas as $value){
    list($idContratos,$idConceptosMaestra,$importe,$observaciones) = explode("]", $value);
    $importeDecimales = $importe;
    $importeDecimales = number_format($importeDecimales / 100, 2, '.', '');
 
    $insert = "INSERT INTO tLineasPendientesPruebas (id, idContratos, idConceptosMaestra, importe, fechaAlta, fechaCobro, factura, observacion) VALUES (NULL, '$idContratos', '$idConceptosMaestra', $importeDecimales, '2018-04-18 00:00:00', '2018-04-18 00:00:00', '0', '$observaciones')";
 
    $resultado=mysql_query($insert, $con);
        echo "<br>IdContratos: " .$idContratos;
        echo "<br>Id Conceptos: " . $idConceptosMaestra ;
        echo "<br>Importe: " . $importeDecimales;
        echo "<br>Observaciones" . $observaciones;
    } ?>


Gracias de antemano,
Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Bucle importar txt a mysql con php

Publicado por GaryHost (4 intervenciones) el 19/04/2018 20:05:22
Por si a alguien le sirve, ya lo solucioné:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
list($idcontratos,$idconceptosMaestra,$importe,$observaciones) = explode("]", $value); //Leo la linea de texto
$conceptosCompletos = "$idconceptosMaestra"; //Almaceno en la variable conceptosCompletos todo lo que va en CPTO
$importesCompletos = "$importe"; //Almaceno en la variable importesCompletos todo lo que va en importe
 
$resultadoCPTO = str_replace("ý", "]", $conceptosCompletos, $x); //Remplazo por corchetes de CPTO para crar el x para el bucle
 
$porcionesCPTO = explode("ý", "", $conceptosCompletos); //Elimino los corchetes de CPTO
$resultadoImporte = str_replace("]", "", $importesCompletos); //Elimino corchetes de Importe
$porcionesImporte = explode("ý", $resultadoImporte); //Elimino los separadores ý
 
for ( $j = 0 ; $j <= $x; $j++){ //Mientras $j sea menor o igual al contador de separadores $x
    $cptoInsertado = $porcionesCPTO["$j"]; //Guardo en la variable $cptoInsertado el valor del campo del array
    $importeInsertado = ($porcionesImporte["$j"] / 100); //Guardo en la variable $importeInsertado el valor del campo del array obteniendo decimales
    echo "Contrato: " . $idcontratos . " Concepto " . ($j+1) .": " . $cptoInsertado . " Importe " . ($j+1) .": " . $importeInsertado . "<br>";
 
}

Donde está el "echo" van los INSERT a la base de datos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Bucle importar txt a mysql con php

Publicado por xve (6935 intervenciones) el 19/04/2018 20:30:51
Gracias por compartirlo!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar