Newsgroup: it.comp.www.php
Titolo: Disperazione ;)

Ciao a tutti,
Sto facendo un piccolo programma di aggiornamento news senza mysql , ma ho
un problemone e non riesco a venirne a capo (ho spulciato ovunque!!!)
questo e' il file trasponi.php
<? /* Legge dal File TXT reimposta e riscrive */
 $fp=fopen("ciao.txt","r");
 while(!feof($fp)){
    $data=fgets($fp,50);    /* Memorizzo DATA        */
    $titolo=fgets($fp,50);  /* Memorizzo TITOLO      */
    $corpo=fgets($fp,50);   /* Memorizzo il primo CORPO       */
    while(strcmp("AUTORE NEWS\n",$corpo)){
        $corpo_fin=$corpo_fin.$corpo;
        $corpo=fgets($fp,50);}
   $autore=fgets($fp,50);  /* Memorizzo AUTORE */
   $corpo_br=nl2br($corpo_fin) ; /* trasforma i /n in BR */
 /* crea la tabella con i campi */
 echo "<table width=\"100%\" border=\"1\" cellspacing=\"0\"
cellpadding=\"0\"><tr bgcolor=\"#000000\">";
 echo "<td width=\"24%\" height=\"5\"><font color=\"#FFFFFF\"><b><font
face=\"Arial, Helvetica, sans-serif\"
size=\"2\">"."$autore"."</font></b></font></td>";
 echo "<td width=\"52%\" height=\"5\"> <div align=\"center\"><font
color=\"#FFFFFF\"><b><font face=\"Arial, Helvetica, sans-serif\"
size=\"2\">"."$data"."</font></b></font></div></td>";
 echo "<td colspan=\"2\" width=\"24%\" height=\"5\"> <div
align=\"right\"><font face=\"Arial, Helvetica, sans-serif\" size=\"2\"
color=\"#FFFFFF\"><b>"."$titolo"."</b></font></div></td></tr>";
 echo "<tr bgcolor=\"#000000\">";
 echo "<td colspan=\"4\" bgcolor=\"#FFFFFF\"> <P align=\"justify\"><font
color=\"#000000\" face=\"Arial, Helvetica, sans-serif\"
size=\"2\">"."$corpo_br","</font></p></td>";
 echo "</tr><tr bgcolor=\"#000000\"><td colspan=\"4\" bgcolor=\"#FFFFFF\"
height=\"2\">&nbsp;</td></tr></table>";
 $corpo_fin="";  /* Azzera corpo per il ciclo successivo */
 } /* Fine While Super Esterno che cicla ogni News!*/
 fclose($fp);
?>
Questo e' il lo schema del file in cui sono contenuti i dati e in cui si
effettua la lettura dei campi
Wednesday 28 May 2003 03:54:36 PM
Titolo
testo
AUTORE NEWS
ARagorn
Praticamente il programma sembra nn riuscire ad uscire dalla strcmp ed il
tutto termina con la tabella visualizzata correttamente e l'errore sotto
elencato
Questo e' l'errore che visualizzo...sotto la tabella che viene creata
perfettamente
Fatal error: Maximum execution time of 30 seconds exceeded in
c:\programmi\apache group\apache\test\ciaociao\trasponi.php on line 11
Ho anche provato  con while(strcmp("AUTORE NEWS",$corpo)){    senza il /n ma
niente da fare....
Aiutatemi ;)
GRazie 1000
Aragorn
--
FAQ non ufficiali K7S5A:
http://www.holyword.it/aragorn/ecs_faq.htm


Questo errore č dato dal fatto che per elaborare la pagina ci metti piů di
30 secondi e quindi php da errore.


Secondo me vai in loop infinito nel while....
e poi perché estrai sempre i primi 50 caratteri??

 e poi perché estrai sempre i primi 50 caratteri??
Reminescenze del c :)
Infatti vado in loop infinito, ma non dovrebbe essere cosi', la strcmp mi
dovrebbe restituire 0 quando incontra la stringa uguale, ma questo non
succede e sinceramente  non capisco il perche', non mi sembra di aver fatto
errori semantici ne' logici....aiutatemi ;)
Ciao e Grazie
Aragorn

 ha scritto nel messaggio
news:BX9Ba.74735$DN.17...@tornado.fastwebnet.it...

Hai provato invece di usare \n usare la seuqnza \n\r
Fammi sapere ciao!

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Aragorn Elessar ha scritto:
| Ciao a tutti,
|
| Sto facendo un piccolo programma di aggiornamento news senza mysql , ma ho
| un problemone e non riesco a venirne a capo (ho spulciato ovunque!!!)
|
| questo e' il file trasponi.php
|
| [temp_snip]
| Questo e' il lo schema del file in cui sono contenuti i dati e in cui
| si effettua la lettura dei campi
|
| Wednesday 28 May 2003 03:54:36 PM
| Titolo
| testo
| AUTORE NEWS
| ARagorn
Se il file e' cosi' :
Wednesday 28 May 2003 03:54:36 PM
TITOLO
prima riga di testo
seconda riga di testo
...
ennesima riga di testo
AUTORE NEWS
Aragorn
Monday 30 May ...
blabla
appare chiaro che non conosci una cosa, cioe' di quante righe e' il
corpo della news, allora e' meglio lasciare il corpo in fondo, in modo
che appena hai le informazioni a proposito della data etc sai che tutto
il resto e' corpo. Tutto il resto fino a quando ? Fino a quando non
trovi x righe solo \n...
IMHO il formato piu' giusto e'
data
titolo
autore
corpo
corpo
corpo
data
[...]
un formato piu' kewl sarebbe CSV cosi' :
data,titolo,autore,very_long_long_body_line\n
data,titolo,autore,another_very_long_line\n
magari puoi pensare di usare questo, e di riformattare la roba che gia'
hai, ma e' un altro discorso ;P
Quindi ora sappiamo che le 3 righe sono dei dati specifici, le altre
fino a tot \n sono il testo della news.
datafile:
[snip]
data
titolo
autore
bla
bla
bla
data
titolo
autore
bla
bla
[/snip]
codice (rozzo e tutto) :
<?php
~        $fp = fopen('news.txt', 'r');
~        while(!feof($fp)) {
~                $entry = array( 'date' => my_fgets($fp),
~                                'title' => my_fgets($fp),
~                                'author' => my_fgets($fp));
~                while(($body = my_fgets($fp)) != '') {
~                        @$entry['body'] .= "$body ";
~                }
~                echo "\n<pre>";
~                print_r($entry);
~                echo "</pre>\n";
~        }
~        function my_fgets ($resource)
~        {
~                return rtrim(fgets($resource), "\n");
~        }
?>
|  /* crea la tabella con i campi */
|  echo "<table width=\"100%\" border=\"1\" cellspacing=\"0\"
| cellpadding=\"0\"><tr bgcolor=\"#000000\">";
|  echo "<td width=\"24%\" height=\"5\"><font color=\"#FFFFFF\"><b><font
| face=\"Arial, Helvetica, sans-serif\"
| size=\"2\">"."$autore"."</font></b></font></td>";
|  echo "<td width=\"52%\" height=\"5\"> <div align=\"center\"><font
| color=\"#FFFFFF\"><b><font face=\"Arial, Helvetica, sans-serif\"
| size=\"2\">"."$data"."</font></b></font></div></td>";
|  echo "<td colspan=\"2\" width=\"24%\" height=\"5\"> <div
| align=\"right\"><font face=\"Arial, Helvetica, sans-serif\" size=\"2\"
| color=\"#FFFFFF\"><b>"."$titolo"."</b></font></div></td></tr>";
|  echo "<tr bgcolor=\"#000000\">";
|  echo "<td colspan=\"4\" bgcolor=\"#FFFFFF\"> <P align=\"justify\"><font
| color=\"#000000\" face=\"Arial, Helvetica, sans-serif\"
| size=\"2\">"."$corpo_br","</font></p></td>";
|  echo "</tr><tr bgcolor=\"#000000\"><td colspan=\"4\" bgcolor=\"#FFFFFF\"
| height=\"2\">&nbsp;</td></tr></table>";
uh !?!? :PPP
ma scusa, usi il punto, allora usa l'apice singolo per le stringhe senza
roba da espandere !
e poi le variabili non devono essere incluse tra doppi apici, e poi e'
meglio usare la virgola invece dell'operatore di concatenazione, e' piu'
efficiente (a volte lo usi) ;))
non ti ammazza lavorare con una roba come quella li' sopra ?!
| Aiutatemi ;)
spero ti serva, ciao :)
- --
oggei
gpg --keyserver 
keys.indymedia.org
 --recv-keys eebb4d0d
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (GNU/Linux)
Comment: Using GnuPG with Debian - 
http://enigmail.mozdev.org
iD8DBQE+1WuuZmjYv+67TQ0RAn0mAJ9OzkbsUSP2NVbj+u3CLHlkMVsfRACfSwSn
7p6TEbF4o4WtIA+MswdTrgE=
=bkxg
-----END PGP SIGNATURE-----

 Fammi sapere ciao!
Ciao niente da fare, con il \n\r non cambia nulla...
Ciao e grazie


Ciao grazie 1000 per l'aiuto, ho pero' ancora un dubbio (piu' che un dubbio
e' una pignoleria). Perche' prima il programma non funzionava?
Ciao e GRazie
ARagorn


dovrebbe restituire 0 quando incontra la stringa uguale,
Fatti stampare cosa legge la strcmp ad ogni ciclo. Dal manuale, mi pare
di aver capito che strcmp() non sia molto comoda da usare.
Eventualmente puoi anche usare
	while ('AUTORE NEWS' != trim($corpo))
	{
		...
	}
Leonardo

Ciao,
Ho appena scoperto che la strcmp funziona, cio' che non va e' in realta' il
feof che non trova la fine del file! FAcendo infatti ciclare il while per
due volte funziona tutto alla perfezione!
Consigli?
Ciao e GRazie
ARagorn


Consigli?
Implementare una macchina a stati. Com'e' fatto il file che usi?
Leonardo

Implementare una macchina a stati. Com'e' fatto il file che usi?
L'ho trovato, com'e' fatto:
Wednesday 28 May 2003 03:54:36 PM
Titolo (su una riga)
testo (N righe)
AUTORE NEWS (riga letterale)
ARagorn (una riga)
Qui ci sono vari problemi:
	1. La data non e' indicata da un "tag" particolare
		--> dovremo usare una regexp
	2. Titolo e testo non sono separati
		--> dovremo IPOTIZZARE che il titolo stia su una riga
	3. AUTORE NEWS e' un tag
		--> usaremo una SM che un po' usi i tag, e un po' no
Gli "stati" del nostro castoro sono quindi:
$stata = array(
	0 =>	'in attesa di riconoscere la data',
	1 =>	'lettura del titolo',
	2 =>	'lettura testo',
	3 =>	'lettura autore',
);
In particolare:
In stato 0, il castoro:
	* ignora l'input.
	* se trova una data, inizializza il vettore
		$News = array (
			'data'	=> data,
		);
	  e passa in stato 1.
In stato 1:
	* l'input è considerato titolo e messo in
		$News['titolo'];
	* $News['testo'] e' inizializzato a '';
	* subito si passa in stato 2
In stato 2:
	* se trova 'AUTORE NEWS' passa in stato 3
	* aggiunge l'input a $News['testo']
In stato 3:
	* mette l'input in $News['autore']
	* passa in stato 0.
L'implementazione (the implementation)
	$fp = fopen('test.txt', 'r');
	for($status = 0;;)
	{
		print "Sono in stato $stata[$status].<br/>";
		// In questo caso:
		// if (feof($fp))
		if (SMfinished())
			break;
		// In questo caso:
		// $input = trim(fgets($fp, ...));
		$input = SMgetInput();
		print "Ho letto: $input.<br/>";
		switch($status)
		{
			case 0:
				if (ereg('^[A-Z][a-z]+ [0-9]+
[A-Z][a-z]+ [0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [AP]M', $input))
				{
					$News = array('data' => $input);
					$status++;
				}
				break;
			case 1:
				$News['titolo'] = $input;
				$News['testo'] = '';
				$News['crlf'] = '';
				$status++;
				break;
			case 2:
				if ('AUTORE NEWS' == $input)
					$status++;
				else
				{
					$News['testo'] .= $News['crlf']
. $input;
					$News['crlf'] = '<br/>'; //
p.es
.
				}
				break;
			case 3:
				unset($News['crlf']);
				$News['autore'] = $input;
				// outputNews($News);
				$status = 0;
				break;
		}
		print "Stato attuale, $status ($stata[$status])<br/>";
	}
Leonardo