Foros del Web » Programando para Internet » PHP »

filtrar contenido de archivo txt

Estas en el tema de filtrar contenido de archivo txt en el foro de PHP en Foros del Web. Hola a todos, estoy rompiendome el marote con otro de mis problemas, paso a contarles mi inquietud, hay forma de filtrar las lineas de un ...
  #1 (permalink)  
Antiguo 16/02/2010, 15:50
Avatar de Sebastian1046  
Fecha de Ingreso: junio-2003
Mensajes: 278
Antigüedad: 20 años, 10 meses
Puntos: 0
filtrar contenido de archivo txt

Hola a todos, estoy rompiendome el marote con otro de mis problemas, paso a contarles mi inquietud, hay forma de filtrar las lineas de un txt?, explico.

Tengo archivo.txt con:
pepe#pedro#chaco#456
pepe#juan#chaco#456
santi#pedro#chaco#456
pepe#juan#chaco#456
pepe#juan#chaco#456
pepe#juan#chaco#456

hay forma de armar una tabla que muestre solo las lineas que dicen "pepe"? y saltear las que dicen santi?

ejemplo de tabla:
echo "<table>";
echo "<tr>";
echo "<td>nombre1</td><td>nombre2</td><td align='center'>nombre3</td><td>numero1</td";
echo "</tr>";
....
echo "</tr>";
echo "</table>";

Tengo un codigo mas complejo, pero sabiendo que metodo usan para logra esto lo aplico a mi proyecto.
Antes de preguntar me volvi loco buscando en internet como podia llegar a hacerlo, estoy dudando que se pueda, pero ustedes son los que saben, se pude logar esto?

Saludos y gracias.
__________________
Agradesco infinitamente a toda la gente del foro que me ayudo/a.
  #2 (permalink)  
Antiguo 16/02/2010, 15:54
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: filtrar contenido de archivo txt

uf.. en realidad no es muy dificil

Código PHP:
Ver original
  1. file() // lee el archivo y lo deja en un array por cada linea del texto
  2. $text = array("pepe#juan#chaco#456","santi#pedro#chaco#456");
  3. foreach($text as $value){ // recorres el array
  4.     echo preg_match('/^pepe/',$value) ? $value : ""; // si empieza por pepe imprime.. si no no hace nada
  5. }
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 16/02/2010, 15:59
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 16 años, 5 meses
Puntos: 25
Pregunta Respuesta: filtrar contenido de archivo txt

imaginando que tu ficheor solo tiene 6 lineas

fichero.txt

Código:
pepe#pedro#chaco#456
pepe#juan#chaco#456
santi#pedro#chaco#456
pepe#juan#chaco#456
pepe#juan#chaco#456
pepe#juan#chaco#456
abrir.php

Código HTML:
<table>
	<thead>
    	<tr>
        	<th>Nombre</th>
            <th>S Nombre</th>
            <th>Apodo</th>
            <th>Nro</th>
        </tr>
    </thead>
    <tbody>
<?
	$solo = "pepe";
	$lines = file('fichero.txt');
	foreach ($lines as $line_num => $line) {
		$datos = explode("#", $line);
		if($datos[0]==$solo){
?>
        <tr>
            <td><?=$datos[0];?></td>
            <td><?=$datos[1];?></td>
            <td><?=$datos[2];?></td>
            <td><?=$datos[3];?></td>
        </tr>
<?
		}
	}
?>
    </tbody>
</table> 
nos vemos!!! n.n
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #4 (permalink)  
Antiguo 16/02/2010, 16:06
Avatar de Sebastian1046  
Fecha de Ingreso: junio-2003
Mensajes: 278
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: filtrar contenido de archivo txt

naaa, por lo menos diganme que lo que pido es dificil y por eso no lo se jajaj

Buenisimo! muchas gracias, ya ayudaron a destrabarme

saludos
__________________
Agradesco infinitamente a toda la gente del foro que me ayudo/a.
  #5 (permalink)  
Antiguo 17/02/2010, 19:46
Avatar de Sebastian1046  
Fecha de Ingreso: junio-2003
Mensajes: 278
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: filtrar contenido de archivo txt

Cita:
Iniciado por hector2c Ver Mensaje
imaginando que tu ficheor solo tiene 6 lineas

fichero.txt

Código:
pepe#pedro#chaco#456
pepe#juan#chaco#456
santi#pedro#chaco#456
pepe#juan#chaco#456
pepe#juan#chaco#456
pepe#juan#chaco#456
abrir.php

Código HTML:
<table>
	<thead>
    	<tr>
        	<th>Nombre</th>
            <th>S Nombre</th>
            <th>Apodo</th>
            <th>Nro</th>
        </tr>
    </thead>
    <tbody>
<?
	$solo = "pepe";
	$lines = file('fichero.txt');
	foreach ($lines as $line_num => $line) {
		$datos = explode("#", $line);
		if($datos[0]==$solo){
?>
        <tr>
            <td><?=$datos[0];?></td>
            <td><?=$datos[1];?></td>
            <td><?=$datos[2];?></td>
            <td><?=$datos[3];?></td>
        </tr>
<?
		}
	}
?>
    </tbody>
</table> 
nos vemos!!! n.n
Hola, los molesto nuevamente, yo obtengo con esto las lineas filtradas que necesito,

pero si quisiera modificarle solo a estas lineas el valor $datos[3] por otro en el archivo.txt?

por ejemplo de esto
Código:
pepe#pedro#chaco#456
pepe#juan#chaco#456
santi#pedro#chaco#456
pepe#juan#chaco#456
pepe#juan#chaco#456
pepe#juan#chaco#456
a esto:
pepe#pedro#chaco#otrodato
pepe#juan#chaco#otrodato
santi#pedro#chaco#456
pepe#juan#chaco#otrodato
pepe#juan#chaco#otrodato
pepe#juan#chaco#otrodato

se pude hacer esto?
__________________
Agradesco infinitamente a toda la gente del foro que me ayudo/a.
  #6 (permalink)  
Antiguo 18/02/2010, 04:43
Avatar de juanmacastillo  
Fecha de Ingreso: agosto-2008
Ubicación: Madrid
Mensajes: 12
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: filtrar contenido de archivo txt

Yo te he hecho esto:

<?php


$info = file("datos.txt");
foreach($info as $datos) {
if (!preg_match("/^pepe/", $datos)) {
$datos = split("#", $datos);
$tablaExcep[] = $datos;
$numDatos = count($datos);
}
}
$salida="";
$salida.=<<<HERE
<table border="1">
HERE;

for ($fil=0; $fil<count($tablaExcep); $fil++) {
$salida.="<tr>\n";
for ($col=0; $col<$numDatos; $col++) {
$salida.="<td>".$tablaExcep[$fil][$col]."</td>";
} // fin col loop
$salida.="</tr>\n";
} // fin fil loop;
$salida.="</table>";

print $salida;


?>

Te permite cambiar cualquier cosa en el txt, incluida la cantidad de elementos y funcionaría. Para filtrar, tan sólo cambiar el /^pepe/ por lo que sea.

Para poder cambiarlo mediante formulario se haría creando una matriz con todos los datos sin filtrar y usar las posiciones como valores.

Como soy nuevo, que los expertos me digan si mi solución es correcta...
  #7 (permalink)  
Antiguo 18/02/2010, 05:52
Avatar de Sebastian1046  
Fecha de Ingreso: junio-2003
Mensajes: 278
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: filtrar contenido de archivo txt

Gracias juanma por tu respuesta, pero creo que no es lo que estoy buscando.

Yo tengo esta base de datos:

base.txt
001#prueba#grupo#CARTONES#1#2#3#0
002#prueba#grupo#CARTONES#1#2#3#0
003#prueba1#grupo#CARTONES#1#2#3#0
004#prueba1#grupo1#CAJA#4#4#4#0
005#yhgg#grupo3#CARTONES#5#5#5#0
006#fghgh#grupo4#CAJA#5#4#4#0

y quiero editar el ultimo valor de la cadena de una linea específica en el txt.

por ejemplo, encuentro el 002 y cambio el 0 por 10
de: 002#prueba#grupo#CARTONES#1#2#3#0
a: 002#prueba#grupo#CARTONES#1#2#3#10

y el txt quedaria:
base.txt
001#prueba#grupo#CARTONES#1#2#3#0
002#prueba#grupo#CARTONES#1#2#3#10
003#prueba1#grupo#CARTONES#1#2#3#0
004#prueba1#grupo1#CAJA#4#4#4#0
005#yhgg#grupo3#CARTONES#5#5#5#0
006#fghgh#grupo4#CAJA#5#4#4#0

Se pude hacer esto?

Saludos y gracias.
__________________
Agradesco infinitamente a toda la gente del foro que me ayudo/a.

Última edición por Sebastian1046; 18/02/2010 a las 06:02
  #8 (permalink)  
Antiguo 18/02/2010, 07:27
Avatar de juanmacastillo  
Fecha de Ingreso: agosto-2008
Ubicación: Madrid
Mensajes: 12
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: filtrar contenido de archivo txt

Sí, claro que se puede, pero es mejor con bases de datos. La idea sería hacer varios inputs con un bucle, tanto al global como a uno filtrado, si lo necesitas... Lo miro y te digo algo...
  #9 (permalink)  
Antiguo 18/02/2010, 07:37
Avatar de Sebastian1046  
Fecha de Ingreso: junio-2003
Mensajes: 278
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: filtrar contenido de archivo txt

si juanma me ayudaría mucho si me decis como, estoy muy trabado con este tema.
Gracias por la buena onda. :)
__________________
Agradesco infinitamente a toda la gente del foro que me ayudo/a.
  #10 (permalink)  
Antiguo 18/02/2010, 07:42
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: filtrar contenido de archivo txt

Código txt:
Ver original
  1. 001#prueba#grupo#CARTONES#1#2#3#0
  2. 002#prueba#grupo#CARTONES#1#2#3#0
  3. 003#prueba1#grupo#CARTONES#1#2#3#0
  4. 004#prueba1#grupo1#CAJA#4#4#4#0
  5. 005#yhgg#grupo3#CARTONES#5#5#5#0
  6. 006#fghgh#grupo4#CAJA#5#4#4#0

Código PHP:
Ver original
  1. $file = file("archivo.txt");
  2. foreach($file as $value){
  3.     list($id, $nombre, $grupo, $nose, $num1, $num2, $num3, $num4) = explode("#",$value);
  4.     if($id == '002') $num4 = 10;
  5.     $nuevo_data[] = $id."#".$nombre."#".$grupo."#".$nose."#".$num1."#".$num2."#".$num3."#".$num4;
  6. }
  7. print_r($nuevo_data);
__________________
More about me...
~ @rhyudek1
~ Github
  #11 (permalink)  
Antiguo 18/02/2010, 07:51
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 16 años, 5 meses
Puntos: 25
Pregunta Respuesta: filtrar contenido de archivo txt

este es el index.php

Código HTML:
<table border="1">
	<thead>
    	<tr>
        	<th>ide</th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
        </tr>
    </thead>
    <tbody>
<?
	$lines = file('fichero.txt');
	foreach ($lines as $line_num => $line) {
		$datos = explode("#", $line);
?>
        <tr>
            <td><?=$datos[0];?></td>
            <td><?=$datos[1];?></td>
            <td><?=$datos[2];?></td>
            <td><?=$datos[3];?></td>
            <td><?=$datos[4];?></td>
            <td><?=$datos[5];?></td>
            <td><?=$datos[6];?></td>
            <td><?=$datos[7];?></td>
            <td><a href='modificar.php?ide=<?=$datos[0]?>'>modificar</a></td>
        </tr>
<?
	}
?>
    </tbody>
</table> 

este es el modificar.php

Código HTML:
<?
	$ide = $_GET['ide'];
	if(isset($_POST['campo_1'])){
		/*
			obtenemos el ide y modificamos
		*/
		$ide = $_POST['ide'];
		/*
			código para modificar
		*/
	}

	$lines = file('fichero.txt');
	foreach ($lines as $line_num => $line) {
		$datos = explode("#", $line);
		if($datos[0]==$ide){
?>
    <form method="post" action="modificar.php">
        <input type="hidden" name="ide" value="<?=$datos[0]?>" />
        <table border="1">
            <tbody>
                <tr>
                    <td>Ide</td>
                    <td><?=$datos[0];?></td>
                </tr>
                <tr>
                    <td>Campo 1</td>
                    <td><input type="text" name="campo_1" value="<?=$datos[1]?>" /></td>
                </tr>
                <tr>
                    <td>Campo 2</td>
                    <td><input type="text" name="campo_1" value="<?=$datos[2]?>" /></td>
                </tr>
                <tr>
                    <td>Campo 3</td>
                    <td><input type="text" name="campo_1" value="<?=$datos[3]?>" /></td>
                </tr>
                <tr>
                    <td>Campo 4</td>
                    <td><input type="text" name="campo_1" value="<?=$datos[4]?>" /></td>
                </tr>
                <tr>
                    <td>Campo 5</td>
                    <td><input type="text" name="campo_1" value="<?=$datos[5]?>" /></td>
                </tr>
                <tr>
                    <td>Campo 6</td>
                    <td><input type="text" name="campo_1" value="<?=$datos[6]?>" /></td>
                </tr>
                <tr>
                    <td>Campo 7</td>
                    <td><input type="text" name="campo_1" value="<?=$datos[7]?>" /></td>
                </tr>
            </tbody>
            <tfoot>
                <tr>
                    <td colspan="2">
                        <input type="submit" value="Modificar" />
                        <input type="button" value="Cancelar" onclick="window.location = 'index.php';" />
                    </td>
                </tr>
            </tfoot>
        </table>
    </form>
<?
			break;
		}
	}
?> 
el código para modificar lo puedes buscar en internet, ando corto en tiempo jejeje
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #12 (permalink)  
Antiguo 18/02/2010, 08:44
Avatar de juanmacastillo  
Fecha de Ingreso: agosto-2008
Ubicación: Madrid
Mensajes: 12
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: filtrar contenido de archivo txt

Mi respuesta al tema. Te permite modificar los datos casi como si fuera una hoja de cálculo...

A ver qué os parece!

<?php session_start() ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Modificar datos en txt</title>
</head>

<body>

<?php


if (!isset($_SESSION["tabla"])) {
loadTabla();
} else {
grabaCambios();
}

function loadTabla() {
$info = file("datos.txt");
foreach($info as $datos) {
$datos = split("#", $datos);
$tabla[] = $datos;
$numDatos = count($datos);
} // fin foreach
$_SESSION["tabla"] = $tabla;
$_SESSION["numDatos"] = $numDatos;
printFormulario($numDatos);
} // fin loadTabla


function printFormulario($numDatos) {
$tabla=$_SESSION["tabla"];
$formulario="";
$formulario.=<<<HERE
<form action="" method="post">
<table>
HERE;
for ($fil=0; $fil<count($tabla); $fil++) {
$formulario.="<tr>\n";
for ($col=0; $col<$numDatos; $col++) {
$valor = $tabla[$fil][$col];
$formulario.=<<<HERE
<td><input type="text" name="$fil$col" value="$valor" /></td>
HERE;
}// fin col loop
$formulario.="</tr>\n";
} // fin fil loop
$formulario.="</table>";
$formulario.=<<<HERE
<input type="hidden" name="cambios" value="true">
<button type="submit">Guardar cambios</button>
</form>
HERE;
print $formulario;
}

function grabaCambios() {
$tabla=$_SESSION["tabla"];
$numDatos=$_SESSION["numDatos"];

// Retomar respuestas
$datosGrabar="";
for ($fil=0; $fil<count($tabla); $fil++) {
$format="";
for ($col=0; $col<$numDatos; $col++) {
$sacar = filter_input_array(INPUT_POST);
$dato = $sacar["$fil$col"];
$dato = rtrim($dato);
$format.=$dato."#";
}// fin col loop
$format = substr($format, 0, strlen($format)-1);
$datosGrabar.=$format."\n";
} // fin fil loop

// Grabar cambios en el archivo
$fp = fopen("datos.txt","w");
fputs($fp,$datosGrabar);
fclose($fp);
print"<h3>Datos guardados</h3>";

unset($_SESSION["tabla"]);
unset($_SESSION["numDatos"]);

print<<<HERE
<form action="" method="post">
<button type="submit">Volver a cambiar</button>
</form>
HERE;
} // fin grabaCambios
?>
</body>
</html>
  #13 (permalink)  
Antiguo 18/02/2010, 14:20
Avatar de Sebastian1046  
Fecha de Ingreso: junio-2003
Mensajes: 278
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: filtrar contenido de archivo txt

Muchas gracias gente, mas o menos con lo que me pasaron pude rebuscarmelas para armar algo que me puede sacar del paso, no es lo ideal, pero me funciona:

<?
$dd = "002";
$LINE_TO_WRITE = (string) (int) $dd;
$NEW_TEXT = "HOLA"."\r\n";

$PATH_TO_FILE = "db_prod.php";

$file = file($PATH_TO_FILE);
foreach($file as $value){
list($id, $nombre, $grupo, $nose, $num1, $num2, $num3, $num4) = explode("#",$value);
if($id == $dd) $num4 = $NEW_TEXT;
$nuevo_data[] = $id."#".$nombre."#".$grupo."#".$nose."#".$num1."#" .$num2."#".$num3."#".$num4;

}

$lins = file($PATH_TO_FILE);

if( $lins === FALSE )
die('Error leyendo archivo '. $PATH_TO_FILE);

if( $LINE_TO_WRITE <= count($lins) )
$lins[$LINE_TO_WRITE - 1] = $nuevo_data[1];
else
$lins[] = $nuevo_data[1];

$fh = fopen($PATH_TO_FILE, 'w');
fwrite($fh, implode('', $lins));
fclose($fh);

?>

como la primera linea de la base de datos esta numerada, busco el 001 y la linea 1 y reemplazo el dato.
db_prod.php
001#gfg#fdgf#gfgf...
002#gfg#fdgf#gfgf...
003#gfg#fdgf#gfgf...
....

yo queria hacer lo mismo, pero sin depender de la numeración de la primera linea, si alguno sabe como mejorarlo le voy a agradecer.

Saludos.
__________________
Agradesco infinitamente a toda la gente del foro que me ayudo/a.

Etiquetas: contenido, filtrar, txt
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:25.