entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Depurar un txt con PHP a partir de datos de SQL Server

Hola a todos, tengo una duda enorme y no tengo ni idea de como empezar, si alguien me puede asesorar un poco, se lo voy agradecer mucho,
sucede que tengo un archivo txt que tiene varios parametros, este archivo va estar alojado en una carpeta dentro de mi servidor, la cosa es que para el sistema que voy a desarrollar, necesito depurarlo a partir de datos que tenga en SQL server, es decir, que solo tome las lineas donde encuentre el dato que se guarde en SQL, esto para hacerlo dinámico, y se puedan comparar tantos parámetros como se tengan en la base, ya tengo la implementacion para hacer la comparación, lo único que no tengo claro es como depurar el txt para que solo me traiga los parámetros que se tengan en la base.Voy a ocupar PHP, si alguien me puede dar alguna idea, algun ejemplo que me sea de utilidad en serio que lo voy agradecer mucho, de cualquier forma trabajare con esto y en cuanto tenga la solución la voy a compartir. Desde ya muchas gracias

2 Respuestas

4votos

Leonardo-Tadei Puntos227320

Hola @rach,

Tal vez no entienda el problema, pero parece que solamente deberías ir leyendo el archivo, y hacer algo solo cuando encuentre el dato deseado lo guarde en la base de datos.

Sería una comparación del valore leído en el archivo con el valor guardado en la DB, y solo si coinciden se guarden.

Te podríamos ayudar mejor si ponés una parte del archivo TXT para que podamos ver su estructura y si nos dieras un ejemplo de un dato que sería válido para cargar...

Saludos cordiales

2votos

rach comentado

@Leonardo-Tadei como puedo modificar este codigo a la inversa, ahi me borra palabras que especifico en la variable, pero como le hago para que borre todo lo diferente a ese valor

$texto = '';
$cadena_a_borrar = 'rachel';
$nombre_archivo = 'test.txt';
$lineas = file($nombre_archivo);

foreach ($lineas as $linea) {
    if (!strstr($linea, $cadena_a_borrar)) {
        $texto .= $linea;
    }
}

$f = fopen($nombre_archivo, 'w'); 
fwrite($f, $texto); 
fclose($f);

2votos

Leonardo-Tadei comentado

Vas a generar un archivo nuevo? En tu pregunta decías que tenías que cargar los valores encontrados en una DB... en fin.

Para que el archivo resultante quede solo con la palabra buscada, en vez de:

    if (!strstr($linea, $cadena_a_borrar)) {
        $texto .= $linea;
    }

hace:

    if (strstr($linea, $cadena_a_borrar)) {
        $texto .= $linea;
    }

Luego el nombre d ela variable $cadena_a_borrar deja de ser representativo, porque ahora hace lo contrario.

Para el caso de que quieras buscar varias líneas, recordá poner un ENTER al final de cada asignación, así podés volver a leer el archivo fácilmente.

1voto

rach comentado

muchas gracias @Leonardo-Tadei si me funcionó, aunque solo funciona con un valor, necesito que sea mas de uno, voy a tratar de ver como lograrlo, muchas gracias

2votos

Leonardo-Tadei comentado

Me alegro que te haya servido.

Para buscar más valores, o bien definís una variable y un IF por cada valor, o bien cargás en un vector todas las palabras y en cada iteración del bucle buscás el valor en cada línea.

Cómo casi siempre, no hay una sola respuesta válida para un algoritmo!

1voto

rach comentado

hola @Leonardo-Tadei gracias por tu comentario, si lo estoy haciendo con el if, pero no lo veo muy factible por q son 700 las palabras a buscar, estoy pensando la manera de hacerlo como con un arreglo, para que tome todo el listado, aun sigo pensando como hacerlo, pero muchas gracias por contestarme

1voto

bichomen Puntos2770

Un if no, un for o un while, para que recorra las 700 palabras y deberías tener esas palabras en un txt o base de datos, desde donde volcarlas.

1voto

rach comentado

hola @bichomen es la idea que tengo, aunque no se como implementarla con lo que necesito, ya que de la forma que lo tengo, me funciona, que es borrando las lineas diferentes a la coincidencia


$texto = '';
$cadena_a_borrar = 'numEulResources';
$cadena_a_borrar2 = 'numHsCodeResources';
$cadena_a_borrar3 = 'maxNumADchReservation';
$cadena_a_borrar4 = 'dlLicFractBbPool2';
$cadena_a_borrar5 = 'eul2msFirstSchedStep';
$cadena_a_borrar6 = 'eulDchMaxAllowedSchRate';
$cadena_a_borrar7 = 'eulLowRate';
$cadena_a_borrar8 = 'eulMaxAllowedSchRate';
$cadena_a_borrar9 = 'eulMaxShoRate';
$cadena_a_borrar10 = 'eulNonServHwRate';
$nombre_archivo = 'after/before.txt';
$lineas = file($nombre_archivo);

foreach ($lineas as $linea) {
    if (strstr($linea, $cadena_a_borrar2)) {
        $texto .= $linea;
    }
    if (strstr($linea, $cadena_a_borrar)) {
        $texto .= $linea;
    }
    if (strstr($linea, $cadena_a_borrar3)) {
        $texto .= $linea;
    }
    if (strstr($linea, $cadena_a_borrar4)) {
        $texto .= $linea;
    }
    if (strstr($linea, $cadena_a_borrar5)) {
        $texto .= $linea;
    }
    if (strstr($linea, $cadena_a_borrar6)) {
        $texto .= $linea;
    }
    if (strstr($linea, $cadena_a_borrar7)) {
        $texto .= $linea;
    }
    if (strstr($linea, $cadena_a_borrar8)) {
        $texto .= $linea;
    }
    if (strstr($linea, $cadena_a_borrar9)) {
        $texto .= $linea;
    }
    if (strstr($linea, $cadena_a_borrar10)) {
        $texto .= $linea;
    }
}

$f = fopen($nombre_archivo, 'w'); 
fwrite($f, $texto); 
fclose($f);```

3votos

bichomen comentado

Deberías utilizar la función gets()

$file = fopen("1.txt", "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached
while(!feof($file))
{
echo fgets($file). "<br>";
}
fclose($file);

Que recorre un fichero linea por linea.

No se como tendrás montado el txt pero si el string a borrar lo tienes solo en una linea entonces ya lo tienes fácil, pero si esta como has puesto arriba tiene 2 opciones poner un disparador tipo almohadilla (#), por ejemplo, para luego con alguna función de php extraer la cadena a partir de ese disparador o utilizar la variable y aprovechando el for hacer algo por el estilo:

$variable = concat($cadena_a_borrar2 + $i);
$i++;

Con esto te ahorrarías todos los if

1voto

rach comentado

hola @bichomen ya modifiqué un poco el código, ya me borra mas de una palabra sin tanto código, el problema es que, al avanzar se queda en la ultima palabra que encuentra y ya no sigue con las demás posiciones para borrar todo lo diferente a lo que se tiene en el arreglo, va recorriendo el arreglo y si en el caso de que todas las palabras están en el txt, todo lo hace bien pero si solo encuentra hasta la posición 3 y la 4 no esta en el txt ya no continua borrando lo diferente, no se si me explico, dejo mi código, y muchas gracias por tu ayuda


$texto = '';
$cadena_a_borrar = 'numEulResources';
$cadena_a_borrar2 = 'numHsCodeResources';
$cadena_a_borrar3 = 'maxNumADchReservation';
$cadena_a_borrar4 = 'dlLicFractBbPool2';
$cadena_a_borrar5 = 'eul2msFirstSchedStep';
$cadena_a_borrar6 = 'eulDchMaxAllowedSchRate';
$cadena_a_borrar7 = 'eulLowRate';
$cadena_a_borrar8 = 'eulMaxAllowedSchRate';
$cadena_a_borrar9 = 'eulMaxShoRate';
$cadena_a_borrar10 = 'eulNonServHwRate';
$nombre_archivo = 'ejemplo1.txt';
$lineas = file($nombre_archivo);

$vars= array($cadena_a_borrar,$cadena_a_borrar2,$cadena_a_borrar3,$cadena_a_borrar5,$cadena_a_borrar6,$cadena_a_borrar7,$cadena_a_borrar8,$cadena_a_borrar9,$cadena_a_borrar10);

$cont=0;
foreach ($lineas as $linea) {
    if (strstr($linea, $vars[$cont])) {
        $texto .= $linea;
        $cont++;
    }

}

$f = fopen($nombre_archivo, 'w'); 
fwrite($f, $texto); 
fclose($f);

1voto

bichomen comentado

Pues que siga contando filas, algo así:

if (strstr($linea, $vars[$cont])) {
        $texto .= $linea;
        $cont++;
    }
else {
   $cont++;
}

Para que continué con la siguiente fila

1voto

rach comentado

@bichomen probé tu solución pero me borra todas las lineas, queda en blanco totalmente

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta