Foros del Web » Programando para Internet » PHP »

Abrir archivo para escribir en anteultimo renglon

Estas en el tema de Abrir archivo para escribir en anteultimo renglon en el foro de PHP en Foros del Web. Tengo un archivo php con definiciones de variables. Y necesito escribir dinamicamente algunas otras variables. Pero como hago para escribir en la última linea, antes ...
  #1 (permalink)  
Antiguo 21/04/2010, 17:03
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Pregunta Abrir archivo para escribir en anteultimo renglon

Tengo un archivo php con definiciones de variables. Y necesito escribir dinamicamente algunas otras variables. Pero como hago para escribir en la última linea, antes de :

?>

archivo.php
Código PHP:
<?php
$contents 
"Inhalt";
$installation "Installation und Betrieb";
$layout "Art of Illusion Einführung";
$modelling "Modelling";
$lights "Lichter";
$textures_and_materials "Texturen und Material";
$textures "Texturen";
$materials "Materialien";
$rendering "Rendering";
$animation "Animation";
$scripting "Scripting";
$whatsnew "Was ist neu";

?>
Mi codigo por ahora es:
Código PHP:
                $pagina=fopen("Library/main_".$listLang.".php""a");
                
fwrite($pagina'$newVar = '.$content); 
                
fclose($pagina); 
  #2 (permalink)  
Antiguo 21/04/2010, 17:17
 
Fecha de Ingreso: diciembre-2006
Mensajes: 60
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Abrir archivo para escribir en anteultimo renglon

te recomiendo que las variables las metas en un archivo de texto
variable = valor

luego las separes mediante
while($linea !=null){
$array = explode("=",$linea)
$variable = $array[0];
$valor = $array[1];
}

asi sera mas sencillo meterle lineas
  #3 (permalink)  
Antiguo 21/04/2010, 17:53
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Abrir archivo para escribir en anteultimo renglon

La función fseek te puede ayudar... yo no, porque no se usarla , pero seguro que la función te ayudará.

EDIT : Leyendo es mucho mejor ¬¬

Cita:
The offset.
To move to a position before the end-of-file, you need to pass a negative value in offset and set whence to SEEK_END.
En otras palabras...

Código PHP:
Ver original
  1. $pagina = fopen("Library/main_".$listLang.".php", "w+");
  2. fseek($pagina, -1, SEEK_END);
  3. fwrite($pagina, '$newVar = '.$content);
  4. fclose($pagina);

Eso debería hacer lo que pides. Prueba ;).

EDIT 2 : Leí otra vez, y me di cuenta que si abres el archivo en modo "a" o "a+", siempre escribirá al final, así que sería mejor que lo abras con "w" o "w+".
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.

Última edición por spider_boy; 21/04/2010 a las 18:09
  #4 (permalink)  
Antiguo 21/04/2010, 19:41
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Abrir archivo para escribir en anteultimo renglon

Gracias a los dos.

La primera sugerencia es interesante. Pero no termina de convencerme. Quizas mañana la implemente, de cualquier manera.

Lo de fseek() será cuestion de probarlo. Pero me parece que es para solo lectura. No es cierto acaso que w y w+ borran los datos existentes antes de escribir?

Voy a aprovechar esto que me pasa para aprender un poco más sobre punteros.
  #5 (permalink)  
Antiguo 21/04/2010, 20:12
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Abrir archivo para escribir en anteultimo renglon

Cita:
Iniciado por mayid Ver Mensaje
Gracias a los dos.

La primera sugerencia es interesante. Pero no termina de convencerme. Quizas mañana la implemente, de cualquier manera.

Lo de fseek() será cuestion de probarlo. Pero me parece que es para solo lectura. No es cierto acaso que w y w+ borran los datos existentes antes de escribir?

Voy a aprovechar esto que me pasa para aprender un poco más sobre punteros.
Que yo sepa w o w+ no borran el contenido, solo abren el archivo para escribir en él. Si no me equivoco, fseek ubica el puntero del archivo donde le indiques, y desde ese punto comienza la escritura/lectura, así que debería hacer lo que deseas.

Nos vemos.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #6 (permalink)  
Antiguo 22/04/2010, 07:27
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Abrir archivo para escribir en anteultimo renglon

Respecto a punteros, y lectura de archivos, tengo la duda sobre los renglones en blanco. Son validos también? Se cuentan? Quizas escriba una funcion para contar los renglones y luego use end() y prev().

Esto dice el manual para fopen:

Cita:
'w' Apertura para sólo escritura; coloca el puntero al archivo al principio del archivo y trunca el archivo a longitud cero. Si el archivo no existe se intenta crear.
'w+' Apertura para lectura y escritura; coloca el puntero al archivo al principio del archivo y trunca el archivo a longitud cero. Si el archivo no existe se intenta crear.
http://ar.php.net/manual/es/function.fopen.php
  #7 (permalink)  
Antiguo 22/04/2010, 07:49
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Abrir archivo para escribir en anteultimo renglon

Bueno, por ahora lo resolví con expresiones regulares:

Código PHP:
$archivo file_get_contents("main_".$listLang.".php");
            
$patron '/([^>])\?>/s';
            
$texto preg_replace($patron"$1\r".$writeContent."\r\n ?>"$archivo);
        
            
$pagina=fopen("main_".$listLang.".php""w");
            
fwrite($pagina$texto); //
            
fclose($pagina); 
  #8 (permalink)  
Antiguo 22/04/2010, 14:33
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Abrir archivo para escribir en anteultimo renglon

Escribí este trozo de código, el cual funcion, pero no del todo...

Código PHP:
Ver original
  1. $cadena = "nueva cadena";
  2. $op = fopen("test.txt","ra+");
  3. $exp = explode("\n", fread($op, filesize("test.txt")));
  4. $lastLine = end($exp);
  5. fseek($op, -strlen($lastLine),SEEK_END);
  6. fwrite($op, $cadena);
  7. fwrite($op, $lastLine);
  8. fclose($op);

El problema es que escribe 2 veces $cadena dentro del archivo. Encontré algunos temas en el repositorio de bugs de php, pero a ninguno le dieron solución, asi que supongo que aún existe en la versión 5.2.5...
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #9 (permalink)  
Antiguo 22/04/2010, 17:09
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Abrir archivo para escribir en anteultimo renglon

Que bueno que te intereses. Yo ya lo resolví.

Mirando tu codigo, me pregunto si no será mejor parsear un texto así:
Cita:
while (!feof($pagina)){
$texto[] =fgets($pagina,4096);
}
Entonces queda cada renglon en un espacio del array.

Igual, con lo de expresiones regulares todo va bien, y le tengo confianza. Lo digo por estudiar algo nomás.
  #10 (permalink)  
Antiguo 22/04/2010, 17:20
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Abrir archivo para escribir en anteultimo renglon

Cita:
Iniciado por mayid Ver Mensaje
Que bueno que te intereses. Yo ya lo resolví.

Mirando tu codigo, me pregunto si no será mejor parsear un texto así:


Entonces queda cada renglon en un espacio del array.

Igual, con lo de expresiones regulares todo va bien, y le tengo confianza. Lo digo por estudiar algo nomás.

No es mala la idea que propones, pero lo que yo hago, es tomar todo el texto, y separar el contenido a partir de los saltos de línea, ya que esto me genera automáticamente un arreglo, en el cual cada casilla contiene una línea del texto (incluyendo saltos de línea). De esta manera evito un ciclo que no considero necesario

Pero si ya lo resolviste, no le seguiré dando vueltas, aunque quedé aproblemado por la doble inserción de texto por parte de fwrite .

Lo reportaría a PHP, pero no sé como se escribirá un buen reporte .
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.

Etiquetas: escribir, renglon
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 06:12.