2010-08-21 44 views
27

Estoy escribiendo un script PHP que agrega números en un archivo de texto. Quiero tener un número en cada línea, así:file_put_contents, file_append y saltos de línea

1 
5 
8 
12 

Si uso file_put_contents($filename, $commentnumber, FILE_APPEND), el resultado será similar a:

15812 

Si añado un salto de línea como file_put_contents($filename, $commentnumber . "\n", FILE_APPEND), se añaden espacios después cada número y una línea vacía al final (subrayado representa espacios):

1_ 
5_ 
8_ 
12_ 
_ 
_ 

¿Cómo consigo que la función para agregar los números de la forma que yo quiero, sin espacios?

+1

si está tan seguro, entonces es el código de la adición. las funciones de php no agregan espacios LOL –

Respuesta

0

No hay nada en el código que proporcionó que generaría esos espacios, a menos que $commentnumber ya contenga el espacio para comenzar. Si ese es el caso, simplemente use trim($commentnumber) en su lugar.

Tampoco hay nada en su código que explique las líneas vacías en la parte inferior del archivo, a menos que $commentnumber pueda ser una cadena vacía. Si ese es el caso, y desea que emita el número 0, use intval($commentnumber).

Por supuesto, solo necesita uno de esos dos. Si desea conservar el contenido tipo cadena, use trim(); si siempre quiere enteros, use intval(), que ya lo recorta automáticamente.

También es posible que haya escrito accidentalmente " \n" en lugar de "\n" en su código actual, pero en el código que ha publicado aquí es correcto.

+0

Comprobé nuevamente la salida de $ commentnumber. De hecho, está sin espacio. Si hago 'echo $ commentnumber. "\ N"', el resultado HTML me muestra un espacio después en lugar de hacer un salto de línea. – user426965

+3

Bueno, ** en HTML ** eso es completamente normal. – Timwi

+0

No. Porque en otros scripts que escribí, hace un salto de línea/línea nueva correcta. – user426965

44

¿Has probado con PHP EOL constante?


file_put_contents($filename, $commentnumber . PHP_EOL, FILE_APPEND) 

--- --- Añadido

acabo cuenta de que mi editor de archivos hace lo mismo, pero no Worrie, es sólo un personaje fantasma que los lugares editor allí para señalar que hay es una nueva línea Usted podría intentar esto

 
A file with EOL after the last number looks like: 
1_ 
2_ 
3_ 
EOF 

but a file without that last character looks like 

1_ 
2_ 
3 
EOF 

where _ means a space character 

se podría tratar de analizar el contenido del archivo utilizando php para ver lo que hay dentro


$lines = explode(PHP_EOL, file_get_contents($file)); 
foreach($lines as $line) { 
    var_dump($line); 
} 

... complicado

+0

Sí, el mismo problema que con "\ n". – user426965

+0

manera muy agradable y sofisticada –

1

molestoregistro, lo que tienes allí es absolutamente bueno. PHP_EOL y "\ n" son exactamente lo mismo.

El código que proporcionó no tiene nada de malo, por lo que debe ser el valor de $ commentnumber que tenga un espacio al final. como se indica, ejecute su $ commentnumber a través de la función trim().

file_put_contents($filename, trim($commentnumber . "\n"), FILE_APPEND); 

Buena suerte.

+4

la función de recorte recortará su nueva línea;) es probable que desee escribir esto: file_put_contents ($ filename, trim ($ commentnumber). "\ N", FILE_APPEND); –

0

Después de leer su código y sus respuestas, he llegado a una teoría ...

Como no puedo ver que haya algún problema con su código, ¿cómo abrió y leyó el archivo? ¿Lo abriste realmente en un editor de texto? ¿Utilizaste un script PHP para hacerlo? Si es así, abra el archivo con un editor de texto y verifique que en realidad haya espacios al final de cada línea. Si en realidad hay ... bueno, ignora el resto de esta respuesta, entonces. Si no, solo sigue leyendo.

Por ejemplo, si se usa algo como esto:

<?php 
$lines = file($filename); 
if($lines) // Error reading 
    die(); 
foreach($lines as $line) 
    echo $line."<br />"; 

Luego lo haría siempre un espacio en blanco al final de la línea debido a la labor manera file(). Asegúrese de que cada$lineno tenga un espacio en blanco, como carácter de línea nueva - al final.
Dado que HTML maneja todos los espacios en blanco - espacios, pestañas, líneas nuevas etc. - como espacios, si hay un espacio en blanco al final de $line, entonces esos aparecerían como espacios en la salida HTML.

Solución: utilice rtrim($line) para eliminar los espacios en blanco al final de las líneas. Usando el siguiente código:

<?php 
$lines = file($filename); 
if($lines) // Error reading 
    die(); 
foreach($lines as $line) 
    echo rtrim($line)."<br />"; 

no tendría los mismos problemas que el primer ejemplo, y todos los espacios al final de las líneas se han ido.

13

pauls respuesta tiene el enfoque correcto pero tiene un error. lo que necesita ist lo siguiente:

file_put_contents($filename, trim($commentnumber).PHP_EOL, FILE_APPEND); 

la constante PHP_EOL se asegura de utilizar la línea de la derecha termina en Mac, Windows y sistemas UNIX la función de ajuste elimina cualquier carácter de nueva línea o un espacio en blanco en ambos lados de la cadena. convertir desde entero sería un gran error, porque 1. usted puede llegar a tener cero, EXPECIALLY debido a los espacios en blanco o caracteres especiales (vengan de donde vengan ...) 2. identificadores de dont necesariamente tienen que ser enteros

0

es porque cada vez que escribe en el archivo, el archivo se está terminando, file_put_contents inserta un salto de línea adicional al final

9

Ohh Guys! Sólo tiene que utilizar

\ r \ n

insted de \ n

Cuestiones relacionadas