- Home
- Categorie
- Coding e Sistemistica
- PHP
- Cancellare riga di testo in file txt in base alla data
-
Ciao Cosina,
dovresti creare un file che esegue il parse del documento txt, andando ad individuare la riga secondo l'anno per poi eseguire la cancellazione ove necessaria. A questo devi poter implementare, accedendo al server, un cron, che magari ogni giorno alle ore 00:00:00 esegue il file di controllo realizzato in precedenza.[PHP]
$txt_file = file_get_contents('path/to/file.txt');
$rows = explode("\n", $txt_file);unlink('path/to/file.txt');
$new_file = fopen('path/to/file.txt', 'a+');
foreach($rows as $row)
{
$data = explode(';', $row);
//esempio, se il tuo valore data è la terza occorrenza
if( ( strtotime($data[2]) + 31536000 ) >= time() ) {
fwrite( $new_file, $row );
}}
fclose( $new_file );
[/PHP]Mi raccomando, prima di eseguire il file come test, esegui un backup del tuo file txt in quanto ho aggiunto l'istruzione unlink() sul file che lo rimuove in maniera inreversibile.
-
Grazie mille Ultima, so come impostare un cron. Nei prossimi giorni faccio le prove. Sei stato gentilissimo
-
Ciao, ho provato ed ha funzionato perfettamente (grazieeeee!!!). Unico problema: le righe, nel file di testo originale, sono incolonnate, cosi`:
Giorgio;xxxxxxxxxxxxxxxxxxx;2019-02-23
Laura;xxxxxxxxxxxxxxxxxxx;2019-03-30Quando il sistema copia e ricrea il file, me le mette tutte in linea, così:
Giorgio;xxxxxxxxxxxxxxxxxxx;2019-02-23Laura;xxxxxxxxxxxxxxxxxxx;2019-03-30
C'è il modo per farle riscrivere incolonnate come originariamente? Altrimenti la consultazione diventa quasi impossibile. Grazie mille
-
Di nuovo ciao Cosina. Certo che c'è il modo.
Modifica questa istruzione:
[PHP]
fwrite( $new_file, $row );
[/PHP]In questo modo:
[PHP]
fwrite( $new_file, $row . "\n" );
[/PHP]Fammi sapere.
Ciao.
-
Ha funzionato perfettamente, grazie mille, mi hai dato un grande aiuto. Lo devo dire, questo forum e
il migliore che conosca. Competenza, professionalita
e disponibilita. In altri ho trovato spesso arroganza e anche mascherate finalita
di guadagno. Premesso che tutti dobbiamo guadagnare, io credo che la collaborazione tra professionisti e non, nelle piccole cose, sia cosa giusta e reciprocamente utile. Buona giornata a te e a tutti. Ciao
-
@Cosina said:
Ha funzionato perfettamente, grazie mille, mi hai dato un grande aiuto. Lo devo dire, questo forum e
il migliore che conosca. Competenza, professionalita
e disponibilita. In altri ho trovato spesso arroganza e anche mascherate finalita
di guadagno. Premesso che tutti dobbiamo guadagnare, io credo che la collaborazione tra professionisti e non, nelle piccole cose, sia cosa giusta e reciprocamente utile. Buona giornata a te e a tutti. Ciao
Io ti ringrazio per le belle parole che hai scritto. Fa sempre piacere ricevere elogi.
Per quanto mi riguarda, sono contento che ti abbia aiutato a risolvere il tuo grattacapo. Esattamente come hai scritto, siamo qui per confronto e anche darci una mano a vicenda.
Per qualsiasi altra problematica, siamo sempre qui!
Ciao.
-
@Cosina said:
Ha funzionato perfettamente, grazie mille, mi hai dato un grande aiuto. Lo devo dire, questo forum e
il migliore che conosca. Competenza, professionalita
e disponibilita. In altri ho trovato spesso arroganza e anche mascherate finalita
di guadagno. Premesso che tutti dobbiamo guadagnare, io credo che la collaborazione tra professionisti e non, nelle piccole cose, sia cosa giusta e reciprocamente utile. Buona giornata a te e a tutti. CiaoGrazie mille Cosina per questo feedback, è per questo che il forum gt è nato, proprio perché quando sono arrivato sulla rete per la prima volta avevo riscontrato troppa arroganza e poca voglia di aiutarsi. Io credo nella condivisione della conoscenza per una crescita globale.
E ci sono persone come Stefano che condividono questa filosofia e la applicano concretamente, anche se sono strapieni di lavoro
In una grande Internet dove l'arroganza dilaga, sapere che esiste un ambiente come questo è un sollievo.
-
Grazie Ultima, sei davvero gentilissimo e grazie anche a te, Giorgio, per il tuo gradito intervento. Quello che dite e` verissimo. Anch'io, nell'ambito delle mie competenze (webdesign), non ho mai perso l'occasione di dare consigli e aiuto agli utenti che mi scrivono e la considero una cosa che, prima di tutto, gratifica e arricchisce me stessa.
-
Approfitto ancora una volta della vostra competenza per un ultimo suggerimento.
Sempre considerando il file di testo oggetto della discussione, vorrei sapere se sarebbe possibile creare un form tramite il quale un utente possa cancellare direttamente la riga corrispondente ai suoi dati. Qualcosa di simile per intenderci:[HTML]<form class="form-contact" action="action.php" method="post" enctype="multipart/form-data">
<p><label>Nome:<br></label><input type="text" name="name"/></p>
<p><label>Password:<br></label><input type="text" name="password"/></p>
<input class="button" type="submit" value="Delete">
</form>[/HTML]
Considerando che nel file di testo data.txt e nella riga di esempio:
Laura;xxxxxxxxxxxxxxxxxxx;2019-03-30
lo spazio occupato dalle crocette equivale alla password criptata.
In pratica, vorrei sapere cosa mettere nel file action.php per ottenere questo risultato.Di nuovo, immensamente grazie
-
Ciao Cosina. L'esempio che avevo scritto in precedenza, lo puoi piegare in base alle tue esigenze aggiungendo o rimuovendo parti che possano tornarti utili.
Il procedimento è il medesimo della data: Si effettua un riconoscimento tramite una condizione e in caso di esito positivo, non riscriviamo la riga nel file. Questo è il sunto, così apprendi meglio la logica. Questo è il codice d'esempio:[PHP]
// recuperi i parametri in POST
// Quindi prima di tutto effettui un controllo se POST è valorizzato, in caso contrario, non fai nulla
if( $_POST != null ) {// a questo punto recuperiamo i dati $name = $_POST['name']; $pass = $_POST['password']; // ora eseguiamo lo stesso identico processo realizzato in precdenza // modificando i parametri di confronto $txt_file = file_get_contents('path/to/file.txt'); $rows = explode("\n", $txt_file); unlink('path/to/file.txt'); $new_file = fopen('path/to/file.txt', 'a+'); foreach($rows as $row) { $data = explode(';', $row); //esempio, se il tuo valore data è la terza occorrenza if( $data[0] == $name && $data[1] == $pass ) { // non faccio nulla } else { fwrite( $new_file, $row . "\n" ); } } fclose( $new_file );
}
[/PHP]
Detto questo però, dovresti dover aggiungere diversi controlli sui campi, così da non creare confusioni o tentativi malevoli di esecuzione del tuo script.
Mi raccomando: prima di qualsiasi test, effettua sempre un backup dei dati, perchè il sistema, prima cancella e poi riscrive il file.
Ciao e fammi sapere.
-
Grazie, tu non sai quanto mi piaccia imparare cose nuove! Tranquillo, quanto alla sicurezza ho tutto sotto controllo nei form attivi; piuttosto esagero, ma non sottovaluto mai in questo campo. Grazie mille di nuovo, sei super
-
@Ultima said:
[PHP]
// recuperi i parametri in POST
// Quindi prima di tutto effettui un controllo se POST è valorizzato, in caso contrario, non fai nulla
if( $_POST != null ) {// a questo punto recuperiamo i dati $name = $_POST['name']; $pass = $_POST['password']; // ora eseguiamo lo stesso identico processo realizzato in precdenza // modificando i parametri di confronto $txt_file = file_get_contents('path/to/file.txt'); $rows = explode("\n", $txt_file); unlink('path/to/file.txt'); $new_file = fopen('path/to/file.txt', 'a+'); foreach($rows as $row) { $data = explode(';', $row); //esempio, se il tuo valore data è la terza occorrenza if( $data[0] == $name && $data[1] == $pass ) { // non faccio nulla } else { fwrite( $new_file, $row . "\n" ); } } fclose( $new_file );
}
[/PHP]Ciao, sono ancora qui per una pignoleria. Il codice in oggetto funziona benissimo e mille grazie di nuovo a Ultima. Quando si cancella la riga, pero
, rimane al suo posto lo spazio vuoto, cioe
una riga vuota. Questo einevitabile, o si puo
eliminare lasciando, comunque, le righe incolonnate com'erano? Non e` una cosa grave, ma tanto per saperlo. Grazie ancora
-
Ciao cosina. Fai bene ad essere pignola in questo lavoro.
Io purtroppo quella porzione di codice l'ho scritta al volo diciamo da "spunto" più che da vera e propria soluzione. Per sistemarla completamente, dovrei fare dei test e fare il debug con il tuo file reale e cercare di capire dove scrive la riga vuota e soprattutto perchè.
La sola cosa che mi viene da dirti è di aggiungere un controllo prima della funzione fwrite per verificare che $row non contenga un vuoto. Una cosa tipo questa:
[PHP]
if( $row != '' or ! empty($row) or $row != ' ' ) {
fwite( $new_file, $row . "\n" );
}
[/PHP]
Però ripeto, dovrei fare qualche debug sul file reale.
Te, hai trovato rimedio?
-
Ciao, non ho ancora trovato il rimedio. Sto cercando. Proprio adesso leggevo questa discussione: //stackoverflow.com/questions/17137286/remove-blank-lines-from-a-text-file , ma non ci capisco molto..
Comunque la riga vuota, nel nuovo file txt, appare esattamente dove, nel file originario, c'era quella che viene cancellata
-
Aspetta, pero
. che faccio qualche altro test, perche
non lo fa sempre, devo capire.
-
Ok, credo di aver capito e risolto. Per fare i test utilizzavo l'ultima riga e, quando veniva scritta la riga successiva, saltava uno spazio. Se lo faccio sulle righe intermedie, invece, le scala correttamente. Dato che quelle da cancellare saranno sempre le righe piu` in alto, il problema non si pone. Grazie mille, sei stato gentilissimo. Ciao
-
Bene, hai risolto!!!!
Son contentissimo.
-
Merito tuo per tutto, sei un grande!