|
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. |