2010-08-21 20 views
27

Sto scrivendo uno script PHP che aggiunge numeri in un file di testo. Voglio avere un numero su ogni linea, in questo modo:file_put_contents, file_append e interruzioni di riga

1 
5 
8 
12 

Se uso file_put_contents($filename, $commentnumber, FILE_APPEND), il risultato è simile:

15812 

Se posso aggiungere un'interruzione di linea come file_put_contents($filename, $commentnumber . "\n", FILE_APPEND), gli spazi sono aggiunti dopo ogni numero e una riga vuota alla fine (sottolineatura rappresenta gli spazi):

1_ 
5_ 
8_ 
12_ 
_ 
_ 

Come faccio ad avere quella funzione per aggiungere i numeri nel modo desiderato, senza spazi?

+1

se siete così sicuri, allora è il vostro codice di aggiungerlo. funzioni PHP non aggiungere spazi LOL –

risposta

0

Non c'è nulla nel codice che hai fornito che genererebbe quegli spazi, a meno che lo $commentnumber contenga già lo spazio per iniziare. In tal caso, utilizzare semplicemente trim($commentnumber).

Nel codice non è presente nulla che spieghi le righe vuote nella parte inferiore del file, a meno che $commentnumber non sia una stringa vuota. Se questo è il caso, e vuoi che emetta il numero 0, usa intval($commentnumber).

Naturalmente, è necessario solo uno di questi due. Se si desidera conservare un contenuto simile a una stringa, utilizzare trim(); se vuoi sempre numeri interi, usa intval(), che già lo ritaglia automaticamente.

È anche possibile che abbia scritto accidentalmente " \n" anziché "\n" nel codice effettivo, ma nel codice che hai postato qui è corretto.

+0

ho controllato l'output di $ commentnumber di nuovo. È senza spazio. Se faccio 'echo $ commentnumber. "\ N"', l'output HTML mi mostra uno spazio dopo, invece di fare un'interruzione di riga. – user426965

+3

Bene, ** in HTML ** è del tutto normale. – Timwi

+0

No. Perché in altri script che ho scritto, fa una corretta interruzione di riga/nuova riga. – user426965

44

Hai provato con PHP EOL costante?


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

--- --- Aggiunto

Ho appena rendo conto che il mio editor di file fa la stessa cosa, ma non WORRIE, è solo un personaggio fantasma che i luoghi Editor lì per segnalare che c'è è un ritorno a capo si potrebbe provare questo

 
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 

si potrebbe provare a analizzare il contenuto del file utilizzando PHP per vedere cosa c'è dentro


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

... ingannevole

+0

Sì, lo stesso problema come l'utilizzo di "\ n". – user426965

+0

modo davvero bello e sofisticato –

1

annoyingregistration, quello che hai c'è assolutamente bene. PHP_EOL e "\ n" sono esattamente gli stessi.

Il codice che hai fornito non ha nulla di sbagliato in esso, quindi deve essere il valore di $ commentnumber che ha uno spazio alla fine. come indicato, esegui il tuo $ commentnumber tramite la funzione trim().

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

Buona fortuna.

+4

la funzione di assetto taglierà via la tua nuova linea;) probabilmente volevi scrivere questo: file_put_contents ($ nomefile, ritaglio ($ commentnumber). \ N ", FILE_APPEND); –

0

Dopo aver letto il codice e le risposte, ho trovato una teoria ...

Dal momento che non riesco a vedere che ci sia qualcosa di sbagliato con il codice, come hai fatto aprire e leggere il file? Lo hai effettivamente aperto in un editor di testo? Hai usato uno script PHP per farlo? In tal caso, aprire il file con un editor di testo e verificare che ci sono in realtà spazi alla fine di ogni riga. Se in realtà c'è ... beh, ignorare il resto di questa risposta, allora. In caso contrario, continua a leggere.

Per esempio, se si utilizza qualcosa di simile:

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

allora si sarebbe sempre uno spazio bianco alla fine della linea a causa del lavoro modo file(). Assicurati che ogni$linenon abbia uno spazio bianco, ad esempio un carattere di nuova riga , alla fine.
Dal HTML gestisce tutti gli spazi bianchi - spazi, tabulazioni, ritorno a capo ecc - come spazi, se c'è uno spazio bianco alla fine del $line, poi quelli sembrerebbe come spazi nell'output HTML.

Soluzione: utilizzare rtrim($line) per rimuovere gli spazi bianchi alla fine delle linee. Utilizzando il seguente codice:

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

non avrebbe gli stessi problemi come il primo esempio, e tutti gli spazi alla fine delle righe sarebbero andati.

13

Pauls risposta ha l'approccio corretto, ma ha un errore. quello che vi serve ist il seguente:

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

la costante PHP_EOL fa in modo di utilizzare la linea a destra che termina il Mac, Windows e sistemi UNIX la funzione trim rimuove qualsiasi nuova riga o spazio bianco su entrambi i lati della stringa. conversione in intero sarebbe un errore enorme perché 1. si potrebbe finire per avere lo zero, soprattutto a causa di spazi bianchi o caratteri speciali (indipendentemente dalla loro provenienza ...) 2. ids dont necessariamente devono essere interi

0

suo perché ogni volta che si scrive per il file, il file è in fase di ultimazione, file_put_contents inserisce un'interruzione di riga extra alla fine

9

Ohh Guys! Basta usare

\ r \ n

invece di \ n

Problemi correlati