Files txt: funzione file()

Nel mio spazio web gratuito c'è supporto MySQL con limitazioni quindi sto cercando di sfruttare al meglio i file di testo.

So che file() legge un file ed ogni riga la restituisce in un elemento di un array.

Ogni riga termina quando c'è un carattere di newline.

Considerando che:

1) voglio usare ogni riga di un file txt come fosse record  di database e quindi recuperarla con file();

2) devo immagazzinare dati in questa maniera data|commento|conferma\n: questa sequenza deve necessariamente essere considerata come riga;

3) il commento tuttavia può essere anche molto lungo e anche sostituendo con str_replace() i caratteri di newline che il commento contiene con <br /> potrebbe disporsi su più linee nel file txt prima di chiudere il record con \n. Ricapitolando, anche se \n è solo uno aprendo con il Blocco Note visualizzo il record(=riga) su più linee perché contiene tanto testo.

Sembra che funzioni, nel senso che identifica correttamente il record anche se si dispone su svariate linee, ma mi domando se è un modo di procedere affidabile.

inviato 10 anni fa
usecram
X 0 X

Per il notepad tieni conto che te lo fa vedere (e solo vedere, non converte!) su più linee se è settato con "formato" "a capo automatico", altrimenti lascia tutto su una linea e apparirà la scroll bar in basso.

Per il resto se il testo non è veramente tanto il metodo che hai usato può andare bene. Chiaramente devi anche sostituire, all'interno del testo, eventuali | con qualcos'altro, senno' potresti avere problemi con l'explode della riga.

risposto 10 anni fa
Senamion
X 0 X

Avevo dimenticato di dire che "a capo automatico" non è flaggato e appare la scroll bar ma ad un certo punto il testo va a capo lo stesso, io mi riferisco a questa eventualità.

Puoi ben capire che voglio stare tranquillo anche in caso di testo molto abbondante, non posso contare sul fatto che un commento sia il più delle volte breve (anche per impieghi futuri in altri contesti).

Hai detto "se il testo non è veramente tanto", bene io vorrei capire fino a che punto posso spingermi!

Be certo i separatori | non sono presenti nel testo.  :P

 :bye:

risposto 10 anni fa
usecram
modificato 10 anni fa
X 0 X

Se stai sviluppando qualcosa tipo guestbook, dove il messaggio potrebbe essere anche molto lungo ti consiglio un approccio leggermente diverso. Sempre file di testo ma un file per ogni commento, nella prima riga i dati fissi con separatori (come hai fatto tu) e a seguire tutto il messaggio con i suoi a capo e tutto quanto.

Tieni conto che il file di testo ha dei limiti anche di dimensioni totali.

risposto 10 anni fa
Senamion
X 0 X

secondo me il ccommento va a capo peché qualche \n, \r o \r\n non è stato convertito correttamente

prova anche ad usare un altro editor di testi per verificarlo.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
<?php
$testo =
"Ti lascio questo breve commento: 
Per quanto tu possa creare alcuni file FLA molto interessanti ed elaborati, che integrano animazione, suono e video, è molto probabile che alla fine vorrai aggiungere anche un qualche tipo di interazione utente.
L'interazione è l'elemento che fa diventare Flash molto di più di uno strumento in grado di visualizzare animazioni o elementi grafici.
L'interazione aggiunge un elemento di controllo e di interesse a un file SWF.
L'interattività potrebbe consistere semplicemente nel richiedere a un utente il suo nome o essere più complessa come la creazione di una chat room in ambiente Flash.
Gli strumenti disponibili in Flash MX 2004 e Flash MX Professional 2004  rendono relativamente semplice creare applicazioni RIA (Rich Internet Applications), unendo siti basati sui dati con interfacce utenti gradevole.
Puoi utilizzare i comportamenti, che ti permettono di controllare la riproduzione del file SWF, di gestire le sorgenti dei dati, di caricare le immagini e di controllare gli elementi video incorporati con un semplice clic su un pulsante, senza dover scrivere neppure una sola riga di codice.
Sono disponibili molti metodi per rendere interattivi i documenti Flash. I pulsanti e i clip filmato possono essere utilizzati per aggiungere interazioni semplici  o molto avanzate in un file SWF. L'interazione viene potenziata dalle azioni e dai comportamenti che aggiungi al file FLA e puoi persino collegare un file SWF a un server per realizzare un'applicazione interattiva avanzata basata sui dati.
L'interazione con il server comporta la creazione di un qualche tipo di connessione.
Puoi interagire con un visitatore in modo molto semplice caricando dei file (proprio come farai in un paio di modi diversi in questa lezione) oppure puoi utilizzare i servizi Web, Flash Remoting, un XML Socket Server o Flash Communication Server.
Nella lezione 10 creerai una connessione del server utilizzando un servizio Web.
Per ora, prendiamo in esame i tipi fondamentali di interattività che puoi aggiungere al sito.
I pulsanti possono aggiungere un tipo di interattività semplice; per esempio, fai clic su un pulsante (evento) e succede qualcosa.
I campi di testo possono introdurre un tipo di interattività leggermente più complessa.
Puoi raccogliere i dati da un utente e inviarli da qualche parte, utilizzando i campi di testo di input o i componenti TextInput, tecnica che imparerai successivamente.
Un evento ha luogo quando il puntatore del mouse viene fatto passare sopra un'area attiva o al di fuori di essa, oppure i tuoi file SWF reagiscono all'evento di pressione dei tasti sulla tastiera.";

$testo = str_replace ("\r\n", "<br />", $testo);
$handle = fopen ("database.txt", "wb");
fwrite ($handle, $testo);
fclose ($handle);

$arrayCommenti = file ("database.txt");
print_r($arrayCommenti);
?>

Vi posto il test che ho effettuato.

$testo contiene un commento composto da un gran numero di caratteri. Converto i suoi newline con <br /> (ipotizziamo che lo script debba girare solo su Win). Lo scrivo su un txt e recupero con file().

Noterete quello che vi dicevo:

  • il commento visto dal blocco note (o in un altro editor) si dispone su 3 linee;
  • file() tuttavia riconosce una riga/record soltanto perché c'è un solo newline alla fine di essa.

Quindi sembrerebbe che io possa adottare questo metodo senza problemi, ma volevo sapere se a vostro parere questa tecnica potrebbe presentare dei problemi e quali.

 :bye:

P.S. $testo contiene più caratteri il forum ne taglia un bel po'

risposto 10 anni fa
usecram
modificato 10 anni fa
X 0 X

La conversione

$testo = str_replace ("\r\n", "<br />", $testo);

non è sufficiente perché un "a capo" potrebbe essere costituito anche solo dal carattere "\n"

prova con

$testo = str_replace (array("\n","\r\n"), "<br />", $testo);

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Oppure usa nl2br()

risposto 10 anni fa
Senamion
X 0 X

nl2br() non toglie gli a capo ma

restituisce la stringa string con '<br />' inserito prima di tutti i newline.

Sì la conversione non è sufficiente ma avevo detto

(ipotizziamo che lo script debba girare solo su Win).

Io notavo come il concetto di riga non ha nel mio test un corrispettivo visuale perché il testo pur essendo incluso da file() in un solo elemento di un array nel notepad si dispone su tre linee.

Mi domandavo se fosse un modo di procedere affidabile, parrebbe di sì, non resta che provare.

risposto 10 anni fa
usecram
X 0 X

se converti tutti gli "a capo" allora non avrai problemi. 

a me è capitato di farlo per un'altro scopo (l'invio di un SMS) e la cosa ha funionato

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ok grazie  :bye:

risposto 10 anni fa
usecram
X 0 X

Inoltre il tuo script girerà su Linux, i server di quel tale spazio gratuito che tu non nomini ma tutti siappiamo qual'è  ;D

Ti consiglio di non usare notepad ma un edito che ti faccia vedere i caratteri di nuova linea, come Word ad esempio :D

Correggo quello che ha scritto Gianni, inserendoci anche il carattere di fine riga per Mac, così è perfetto.

$testo = str_replace (array("\r","\n","\r\n"), "<br />", $testo);

risposto 10 anni fa
Marco Grazia
X 0 X
Inoltre il tuo script girerà su Linux, i server di quel tale spazio gratuito che tu non nomini ma tutti siappiamo qual'è  ;D

Oooops mi sa che mi hai scoperto  ^-^

Correggo quello che ha scritto Gianni, inserendoci anche il carattere di fine riga per Mac, così è perfetto.

$testo = str_replace (array("\r","\n","\r\n"), "<br />", $testo);

Avendo provando direi che sia meglio:

$testo = str_replace (array ("\r\n", "\r", "\n"), "<br />", $testo);

altrimenti su Win un newline corrisponderà a due <br />

 :bye:

risposto 10 anni fa
usecram
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda