Newsgroup: it.comp.www.php
Titolo: Domanda da newbie...

Ciao a tutti,
sto cercando di imparare il php e per farlo in modo piu' stimolante,
cerco di risolvere piccoli problemini.
Ho fatto una specie di contatore che usa le immagini al posto dei
numeri. L'evoluzione di questo concetto e' stata uno script che
potesse sostituire delle immgini gif alle lettere. E su questo mi sono
arenato.
Problema: scrivere uno script che prenda del testo da un documento
txt, conti il numero delle lettere (spazi compresi), e sostituisca ad
ogni lettera dell'alfabeto la gif corrispondente. 
Supponendo che io abbia una cartella contenete le mie lettere
dell'alfabeto in formato gif (a.gif, b.gif, c.gif, etc.), come faccio
a fare questa sostituzione ? Con un bel ciclo for, ho pensato... Ma
non viene :( 
E poi, come faccio a togliere gli spazi (non ho una gif per il
carattere "spazio" :)
Il problema e' stupido, e forse anche inutile, ma e' giusto per
imparare ...
Gradiro' qualsiasi suggerimento :)
Luc

 carattere "spazio" :)
Una volta che hai letto tutta la stringa con il numero devi leggere ogni
caratteree e produrre il giusto output.
Questo si traduce in un ciclo for che sfrutti substr(stringa,offset,num) per
leggere un singolo carattere (ma ci sono molti modi diversi).
Diciamo che metti le immagini nella cartella "img": se esiste un file con
nome CARATTERE.gif (1.gif, a.gif..) lo mostri, altrimenti lo scrivi com'č.
Questo ti risolve il problema dello spazio e di eventuali caratteri non
previsti
// in $stringa hai il numero
for ($loop = 0; $loop < strlen($stringa); $loop++)
{
    $c = substr($stringa,$loop,1);
    $nomefile = "img/".$c.".gif";
    if (file_exists($nomefile))
        echo '<img src="'.$nomefile.'">';
    else echo $c;
}
Vedi se va...
Ludovico Grossi

Vedi se va...
Funziona benissimo :) Io ci ho messo il triplo del codice (e il
risultato non era granche').
Ho solo avuto qualche problema nel settare il path della cartella in
modo corretto, ma e' una deficienza mia ...
Grazie ancora.
A questo punto approfitto della tua gentilezza.
All'inizio del codice ho messo le istruzioni per l'apertura di un file
di testo, e l'estrazione della stringa da tale file. Per renderlo
ancora piu' generico, verrei fargli prendere come input il path del
file da aprire (cioe' senza doverlo scrivere all'interno del codice
ogni volta), cosi' lo stesso codice puo' funzionare con piu' documenti
txt. Solo che non ho capito bene come si passa l'argomento ad uno
script...
Qualcosa del tipo 
www.miosito.com
\mioscript.php?testo.txt
ma poi, effettivamente, il codice come fa a sapere come interpretare
il "?testo.txt"  ?
So che son domande un po' del cappero, e vi assicuro che sto studiando
anche sul manuale, ma quando si e' agli inizi la confusione e' tanta,
e un consiglio diretto fa molto comodo ...
Luc

 il "?testo.txt"  ?
in questo modo:
miosito.com/mioscript.php?file=testo.txt
hai il nome del file nella variabile $_GET[file]
CIAO
--
CLS

in questo modo:
Grazie anche a te !
Qualcuno sa dirmi, adesso, perche' questo codice non funziona ?
<?
$documento = fopen("../data/luc.txt","r");
$stringa=fgets($documento,4000);
for ($loop = 0; $loop < strlen($stringa); $loop++)
{
    $c = substr($stringa,$loop,1);
    $nomefile = "../img/numeri/".$c.".gif";
    if (file_exists($nomefile))
        echo '<img src="'.$nomefile.'">';
    else echo $c;
}
 fclose($documento);
?>
Ho capito che il problema e' l' "a capo", perche' se il mio file di
testo inizia subito con del testo, appunto, non ci sono problemi. Il
fatto e' che se il testo contiene degli "a capo", tutto quello che
c'e' dopo il primo "a capo" viene cancellato (percio', in definitiva,
mi viene stampata solo la prima riga).
Luc

 mi viene stampata solo la prima riga).
string fgets ( int fp, int length)
Restituisce una stringa di length - 1 byte letti dal file puntato da fp. La
lettura termina quando sono stati letti length - 1 byte, un caratere di
newline (che viene incluso nel valore restituito), o alla fine del file
(EOF) qualora giunga prima. Se no length is specified, the length defaults
to 1k, or 1024 bytes.
In pratica con fgets leggi la prima riga e dovresti usarlo più volte per
leggere le altre (con un bel while o simili)... ma perchè questo tuo file è
così incasinato se ti deve contenere solo un numero?
Ad ogni modo potresti usare, per brevità di codice
if (!isset($filename))
    $filename = "nomefile.txt"; // o glielo passi o lo stabilisce lo script
$contenutofile = implode("",file($nomefile));
che è un metodo poco scientifico, ma è molto comodo per leggere tutto un
file in una stringa. L'alternativa classica è, come da manuale del php
$fd = fopen ("inputfile.txt", "r");
while (!feof ($fd)) {
    $buffer = fgets($fd, 4096);
    echo $buffer;
}
fclose ($fd);
Ludovico Grossi

così incasinato se ti deve contenere solo un numero?
Per "studio". Forse non mi son spiegato bene, questa volta sto
cercando di convertire in immagini un intero documento, non solo dei
numeri.
Cioe', posto che io abbia creato e messo in una cartella tante
immagini corrispondenti alle lettere dell'alfabeto, volevo scrivere
del codice che aprisse un file di testo, lo leggesse, e mi desse come
output lo stesso testo, ma scritto con immagini. E' una cosa stupida,
ma e' una scusa come un altra per imparare. 
Grazie per il suggerimento.
Luc