Foros del Web » Programando para Internet » PHP »

Insertar cadena en una cierta linia de texto

Estas en el tema de Insertar cadena en una cierta linia de texto en el foro de PHP en Foros del Web. Tengo en un fichero txt enorme el codigo de una tabla llena de enlaces pero le falta las etiquetas <tr> de las columnas, para poder ...
  #1 (permalink)  
Antiguo 29/12/2003, 18:13
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 15 años, 9 meses
Puntos: 0
Insertar cadena en una cierta linia de texto

Tengo en un fichero txt enorme el codigo de una tabla llena de enlaces pero le falta las etiquetas <tr> de las columnas, para poder arreglarlo ( lo haría a mano pero se trata de un fichero diario). Pongamos que el fichero contiene lo siguiente:

<table class=enlaces>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
</table>

Bien quiero crear 4 columnas en la tabla, por lo que había pensado cada 4 linias sustituir </td> por </td></tr><tr> y así acabar la fila y comenzar la siguiente. Y sustituir el <table> del principio por <table><tr> y así comenzar la primera fila.

Deberá quedar así.
<table class=enlaces>
<tr>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
</tr>
<tr>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
</tr>
</table>

Y no sé ni por donde empezar, como lo hago?

A ver si alguien con corazón me puede hechar una mano :P
  #2 (permalink)  
Antiguo 29/12/2003, 18:42
 
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 249
Antigüedad: 14 años
Puntos: 0
Mirá

meté un for con una variable

for($i=0; $i<10; $i++){
if($b>5){echo "</tr><tr>";$b=0;})
echo "<td></td>";
$b+=1;
}

espero que me entiendas
  #3 (permalink)  
Antiguo 29/12/2003, 19:35
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 15 años, 9 meses
Puntos: 0
El problema es que el texto es inmenso y tengo que poner unos 200 </tr><tr>. El que me has puesto solo es para cuando tienes que poner uno, no?

Un saludo y gracias.
  #4 (permalink)  
Antiguo 30/12/2003, 02:32
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 14 años, 2 meses
Puntos: 1
hola, se me ocurrio plantearte una solucion, porke hace unos dias estaba pensando en algo parecido, y me parece interesante esto, a ver si t funciona:

Código PHP:
<?
$file 
"text2.txt";
if (!
$fp fopen($file,'r')) { echo "error al abrir el archivo"; }
$i 0;
$contenido "";
while (!
feof($fp)) {
    if (
fgets($fp,4096) == "<td (.*)>(.*)</td>") {
        
$i++;
        if (
$i == 4) {
            
$contenido .= fgets($fp,4096).'</tr><tr>';
            
$i 0;
        } 
// segundo if
        
else { $contenido .= fgets($fp,4096) }

    } 
// primer if
    
else { $contenido .= fgets($fp,4096); }

//del while

fclose($fp);

$re fopen($file,'w');
fwrite($re,$contenido);
fclose($re);

//mostramos la alteracion del contenido para verificar errores:

echo htmlspecialchars($contenido);
?>
y bueno, esto es todo, espero ke t sirva, realmente no lo he probado, lo acabo de escribir, y son las 3 30am en mi pais y tengo sueño :P, asi ke salu2x. nos vemos luego...

PD: los comentarios escritos no tienen ke ver en nada, son solo una guia ke aostumbro a hacer para no perderme cuando programo sin colores...
__________________
In a world without walls, who needs Windows?

Última edición por Volrath; 30/12/2003 a las 21:56
  #5 (permalink)  
Antiguo 30/12/2003, 08:04
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 15 años, 9 meses
Puntos: 0
No funciona :(

A ver investigando un poquillo he llegado a estro.
$fp = fopen("fichero.txt","r");
$contents = fread ($fp, filesize ("fichero.txt"));
$parte= explode("\n", $contents);
$i="0";
$enlace=$parte[$i+4]; //+4+4+4+4.....
$aaa=str_replace("</td>","</td></tr><tr>","$enlace");

Meto cada linia del archivo en una variable que depende de i(n de linia) y puedo ir sumandole 4 para bajar de linia.. Creo que los tiros deben ir poniendo tipo for que sume de 4 en 4. Que es lo que no sé hacer :(

Un saludo y gracias.
  #6 (permalink)  
Antiguo 30/12/2003, 23:09
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 14 años, 2 meses
Puntos: 1
LISTO jejeje, disculpa por el askeroso codigo ke t pase ayer, realmente estaba muy muy dormido :P, asi ke hoy tenia un poco d tiempo libre, y leyendo un script de un contador de usuarios online sin mysql me acorde d este post jejeje (=S), asi ke planee otra respuesta, aki esta el codigo:

Código PHP:
<?
$file 
"archivo.txt";
$arr file($file);

for ( 
$i $i sizeof($arr) ; $i $i+) {
    
$arr[$i] = $arr[$i]."</tr><tr>\n";
}

$contenido implode(""$arr);

$fp fopen($file,'w');
fputs($fp$contenido);
fclose($fp);

//mostramos la alteracion del contenido para verificar errores:

$contenido htmlspecialchars($contenido);
$contenido nl2br($contenido);
echo 
$contenido;
?>
ya lo probe, y funciona a la perfeccion creo, pero tienes ke estar conciente en una cosa, el texto fuente (es decir, el ke kieres transformar), no puede ser asi:

<table class=enlaces>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
</table>

sino asi:

<table class=enlaces>
<tr>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
<td width="50%"></td>
</tr>
</table>

y eso si supongo ke lo puedes hacer a mano...
esto es todo...
salu2x.
__________________
In a world without walls, who needs Windows?
  #7 (permalink)  
Antiguo 31/12/2003, 16:33
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 15 años, 9 meses
Puntos: 0
Muchas gracias nen, me estaba volviendo loco.

Lo he probado y es justamente lo que buscaba, muchas gracias de nuevo.

Un saludo.
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 01:15.