asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 6410
ASPCode.it - Store
<< lezione precedente lezione successiva >>

ASP: la guida introduttiva - Capitolo 5 - Interazione con i file di testo

   5.0   ASP e i file di testo
   5.1   OpenTextFile, CreateTextFile e Server.MapPath
   5.2   L'oggetto TextStream
   5.3   Lettura di un archivio basato su file di testo

5.0 - ASP e i file di testo

Grazie all'ActiveX Scripting.FileSystemObject e all'oggetto TextStream ad esso correlato ASP permette la lettura/scrittura di file di testo residenti sul disco rigido del server che mette in esecuzione le pagine realizzate. Questa funzione risulta molto importante ed utile in tantissimi servizi, di pari passo con la possibilità di accesso ai database che sarà analizzata in seguito. Grazie ai semplici file di testo, infatti, è possibile realizzare piccole banche dati per conservare dati ed informazioni, oppure è possibile conservare in maniera disaccoppiata i contenuti e l'impostazione grafica delle pagine di un sito, in maniera tale da rendere più agevole un intervento di qualsiasi tipo su di essi. Sapendo manipolare i file di testo diventa poi un gioco da ragazzi realizzare tipici e diffusi servizi quali i sondaggi, i libri per gli ospiti, i forum e molto altro. Tutto ciò sarà analizzato nel dettaglio nello svolgimento del capitolo prima e del resto della guida poi.

5.1 - OpenTextFile, CreateTextFile e Server.MapPath

I due particolari metodi OpenTextFile e CreateTextFile dell'ActiveX Scripting.FileSystemObject, come visto nel corso del capitolo precedente, restituiscono un riferimento ad un oggetto di tipo TextStream, utile per la gestione sequenziale dei file di testo. Prima di passare all'analisi di tale oggetto, quindi, scopriamo anzitutto come utilizzare in maniera corretta questi due metodi.

riferimento = oggetto.OpenTextFile(nomefile[, modoIO[, creazione[, formato]]]);

Questa è la sintassi "modello" per l'utilizzo di OpenTextFile. Sondiamone i parametri.

nomefile - parametro obbligatorio, si tratta di una stringa che identifica in maniera completa il percorso del file di testo da aprire. Il più delle volte capita che non si conosca a priori il persorso completo di un file. Si metta il caso, ad esempio, che si voglia aprire il file test.txt posto nella stessa medesima cartella che contiene la pagina ASP in lavorazione. Poichè non è possibile impostare percorsi relativi è altrettanto impossibile scrivere semplicemente oggetto.OpenTextFile("test.txt"), visto che la stringa "test.txt" è priva di significato per il metodo in questione. La sintassi giusta richiederebbe perciò un'espressione del tipo "C:\inetpub\wwwroot\nomecartella\test.txt". Un tipo di espressione del genere, comunque, sarebbe una vera e propria mina per la portabilità del codice: spostando la pagina ASP da una cartella ad un'altra diverrebbe necessario cambiare ogni riferimento al file, e lo stesso avverrebbe spostandosi da un server ad un altro, ad esempio dal proprio PWS di casa ad un IIS su Internet. Per porre rimedio a ciò verrà usato un particolare metodo dell'oggetto built-in Server, che ancora dobbiamo considerare nel suo insieme. Per ora, quindi, basti sapere che Server.MapPath("test.txt") è in grado di restituire il persorso completo del file test.txt partendo da un riferimento relativo. Per questo la sintassi corretta per aprire il nostro file di testo diviene oggetto.OpenTextFile(Server.MapPath("test.txt")).

modoIO - parametro facoltativo, si tratta di un intero (o di una equivalente forma mnemonica costante) in grado di specificare la modalità di apertura del file. Il valore 1 (ForReading) indica che il file di testo viene aperto in sola lettura, il valore 2 (ForWriting) indica che il file di testo viene aperto in sola scrittura, il valore 8 (ForAppending) indica che il file di testo può essere scritto appendendo le nuove righe dettate in coda a quelle già presenti in esso (situazione molto sfruttata nei file di log). Se non specificato è automaticamente 1.

creazione - parametro facoltativo, si tratta di un booleano (true o false) che indica come il metodo debba comportarsi qualora il file di testo specificato non risulti esistente. Se il valore è true il file di testo verrà generato automaticamente.

formato - parametro facoltativo, si tratta di una forma mnemonica costante in grado di specificare il formato da utilizzare nella lettura/scrittura del file di testo. I valori ammessi sono: TristateTrue, che indica l'utilizzo del formato Unicode, TristateFalse, che indica l'utilizzo del formato ASCII e TristateUseDefault, che apre il file utilizzando l'impostazione predefinita di sistema. Se omesso il file verrà aperto in modalità ASCII.

Non ci si deve comunque spaventare davanti a questa immane mole di dati: il più delle volte si ricorre all'utilizzo del solo parametro obbligatorio nomefile.

Assai simile è il comportamento di CreateTextFile, che si utilizza secondo il modello sotto fornito:

riferimento = oggetto.CreateTextFile(nomefile[, sovrascrittura[, unicode]]);

nomefile - parametro obbligatorio, del tutto equivalente a quanto detto rispetto all'omonimo parametro obbligatorio di OpenTextFile.

sovrascrittura - parametro facoltativo, si tratta di un valore booleano che indica se è possibile sovrascrivere file di testo già esistenti.

unicode - parametro facoltativo, si tratta di un valore booleano che stabilisce il formato di codifica da utilizzare: true sta per il formato Unicode, mentre false per il formato ASCII. Se omesso il file verrà codificato secondo il formato ASCII.

5.2 - L'oggetto TextStream

Ambo i metodi appena visti restituiscono un oggetto di tipo TextStream in grado di permettere al meglio l'accesso sequenziale ad un testo (in inglese stream, appunto). Tramite i metodi e le proprietà fornite da questo oggetto sarà possibile leggere, scrivere e muoversi dentro un file di testo. La seguente tabella rappresenta schematicamente quanto offerto:

Metodi
     
Close Chiude e conclude l'accesso sequenziale ad un file  
Read

Accetta un parametro intero n
Legge e restituisce quindi n caratteri dal file di testo manovrato dall'oggetto di invocazione

ReadAll Legge l'intero contenuto del file e lo restituisce come stringa
ReadLine Legge un'intera riga del file fino al carattere di "nuova riga" escluso e la restituisce come stringa
Skip Accetta un parametro intero n
Durante la lettura di un file salta n caratteri e posiziona lo stream sul carattere immediatamente successivo all'ultimo ignorato
SkipLine Salta ed ignora un'intera riga del file
Write Accetta un parametro intero str
Stampa quindi il contenuto di str all'interno del file
WriteBlankLines Accetta un parametro intero n
Scrive quindi nel file n righe vuote
WriteLine Accetta un parametro intero str
Stampa quindi il contenuto di str all'interno del file e lo fa seguire da un carattere di "nuova riga"
     
Proprietà
     
AtEndOfLine Restituisce true se il puntatore dello stream Ŕ posizionato immediatamente prima dell'indicatore di fine di riga, restituisce false in caso contrario
AtEndOfStream Restituisce true se il puntatore dello stream Ŕ posizionato immediatamente prima dell'indicatore di fine file, restituisce false in caso contrario
Column Restituisce il numero di colonna della posizione di carattere corrente del file
Line Restituisce il numero di linea della posizione di carattere corrente del file
     

METODO O PROPRIETA' UTILIZZABILE SOLO IN FASE DI LETTURA DEL FILE DI TESTO

METODO O PROPRIETA' UTILIZZABILE SOLO IN FASE DI SCRITTURA DEL FILE DI TESTO

5.3 - Lettura di un archivio basato su file di testo

Una volta a conoscenza degli "ingredienti" messi a disposizione dall'oggetto TextStream è ora necessario imparare a realizzare delle buone miscele in grado di produrre utili risultati. L'esempio che segue utilizza un file di testo per memorizzare una classica rubrica ed un file ASP per la lettura e l'intabellamento su output HTML di essa.
Per prima cosa si realizzi il file di testo rubrica.txt:

Pinco$pinco@hotmail.com$http://www.pinco.it
Pallino$pallino@freemail.it$http://utenti.tripod.it/pallino
Caio$caio@tin.it$http://go.to/caio
Tizio$tizio@hotmail.com$http://www.tizio.net

Questo file di testo reca al suo interno quattro righe, che possono essere aumentate o diminuite a proprio piacimento, ognuna delle quali riporta tre informazioni relative ad un singolo utente, secondo la seguente sintassi:

nome_utente$email_utente$homepage_utente

La seguente pagina ASP attinge i dati da questo archivio e li propone all'interno di una semplice tabella HTML, con tanto di link ipertestuale relativamente alle ultime due informazioni di ogni riga:

<%@ LANGUAGE = JScript %>
<html>
<head>
<title>Rubrica in ASP su file di testo</title>
</head>
<body>

<%
// Richiama Scripting.FileSystemObject
var fso = new ActiveXObject("Scripting.FileSystemObject");
// Apr il file di testo in lettura
var stream = fso.OpenTextFile(Server.MapPath("rubrica.txt"));
%>

<table border="1">
<tr>
<td><b>NOME</b></td>
<td><b>E MAIL</b></td>
<td><b>HOME PAGE</b></td>
</tr>
<%
while (!stream.AtEndOfStream) {
// Legge una singola riga
aux = stream.ReadLine();
// Divide la riga ad ogni occorrenza di $
arr = aux.split("$");
%>
<tr>
<td><%=arr[0]%></td>
<td><a href="mailto:<%=arr[1]%>"><%=arr[1]%></a></td>
<td><a href="<%=arr[2]%>" target="blank"><%=arr[2]%></a></td>
</tr>
<%
}
%>
</table>

<%
// Chiude lo stream aperto in precedenza
stream.Close();
%>
</body>
</html>

I passi essenziali da comprendere sono 5:

1. Il file di testo rubrica.txt viene aperto ed un riferimento ad esso viene tenuto nella variabile stream
2. Grazie all'utilizzo della proprietà AtEndOfStream (true solo quando il file è stato interamente letto) il contenuto del ciclo while viene ripetuto tante volte quante sono le righe presenti nel file di testo
3. Ogni riga viene sequenzialmente letta e divisa in un Array di tre stringhe grazie al metodo Split("$") dell'oggetto String di JScript
4. I risultati vengono inviati su output HTML
5. Lo stream viene chiuso ricorrendo al metodo Close

Qualsiasi intervento si faccia ora nei confronti del file di testo rubrica.txt si vedrà il cambio riflesso nella pagina HTML prodotta dal codice ASP. Gestire un archivio su file di testo è molto più semplice che amministrare le stesse identiche informazioni già intabellate in un file HTML. Sul file rubrica.txt, infatti, si potrebbero ipotizzare con un po' di sapienza delle aggiunte automatiche o delle ricerche altrimenti impossibili o comunque complesse su un file HTML. Torneremo su questi argomenti nei capitoli successivi.

Come esercitazione si provi per il momento ad utilizzare i metodi CreateTextFile e WriteLine per generare automaticamente da pagina ASP un file di testo sul proprio hard disk.

<< lezione precedente lezione successiva >>


Utenti connessi: 6410