Ricercare del testo in un file...

php.net è down!!! :tichedoff:

lasciamo stare i commenti!!!

devo creare una funzione di ricerca che cerca il testo immesso nel campo input all'interno di un file.

il testo ha la seguente sintassi: km1234 dove km è sempre uguale e 1234 è un codice a 4 cifre.

il file nel quale deve cercare ha la seguente struttura:

10

*1*185.jpg*2*km1234-km3214* *162994*800*533*463*308*1158333063

*2*189.jpg*2***143850*800*533*463*308*1158333063

*3*190.jpg*2***137143*800*533*463*308*1158333063

*4*192d.jpg*2***135573*800*533*463*308*1158333063

*5*192f.jpg*2***81054*800*533*463*308*1158333063

*6*192h.jpg*2***100851*800*533*463*308*1158333063

*7*192k.jpg*2***100237*800*533*463*308*1158333063

*8*193.jpg*2***106173*800*533*463*308*1158333063

*9*194.jpg*2***101731*800*533*463*308*1158333063

*10*195.jpg*2***136686*800*533*463*308*1158333063

dove 10 è il numero progressivo assegnato ai nuovi dati inseriti e le successive righe contengono ognuna i dati dei singoli inserimenti:

*10 = indice della foto (mi interessa prelevare questo dato)

*185.jpg = nome del file

*2 = indice del folder nel quale il file è contenuto (folder virtuale)

*km1234-km3214 = titolo della foto, questo è il punto dove lo script deve cercare, sono i codici dei prodotti in foto separati dal simbolo '-'

il resto non mi interessa.

premesso che lo script gira su un cd e che non è possibile cambiare i nomi dei file, l'unica cosa che l'utente può fare con questo script è inserire il testo da ricercare... quindi non ci sono problemi di sicurezza.

lo script in pratica deve scompattare le stringhe, cercare la stringa dove è presente il codice (può essere presente in più foto), fornire i risultati come indici delle foto.

esempio:

cero: km 1234

risultato: 5, 15, 21...

visto che php.net è down non posso leggere il manuale... qualcuno mi sa aiutare?

inviato 10 anni fa
arjuna
X 0 X

prima di provare a risolvere il problema ti chiedo come mai non hai pensato ad una soluzione basata su DB. La ricerca diverrebbe molto semblice mentre lavorare con i file di testo, se questi iniziano a crescere, diventa oneroso per lo script.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Qualche giorno fa ho postato circa la ricerca di uno script per gestire un gallery leggera.

La gallery in questione è: http://www.minigal.dk/, semplice, leggera, senza database.

Visto che la farò partire usando: http://www.server2go-web.de/, preferivo non usare un db... anche perchè il tutto andrà su un cd.

Il file di testo conterrà 220 righe. Non di più.

risposto 10 anni fa
arjuna
X 0 X

ok, php.net funziona di nuovo... adesso posso cavarmela anche da solo... magari poi mi dite se la soluzione che troverò è adeguata!

tnks

risposto 10 anni fa
arjuna
X 0 X

Test di lettura del file:

<?php
echo "Test di scrittura <br />";


$filename = "mg2db_idatabase.php";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);

echo $contents;

?>

adesso devo fargli interpretare l'output...

risposto 10 anni fa
arjuna
X 0 X

mmm... come navigo nell'output?

un esempio di output è il seguente:

10 *1*185.jpg*2*km1234-km3214* *162994*800*533*463*308*1158333063 *2*189.jpg*2***143850*800*533*463*308*1158333063 *3*190.jpg*2***137143*800*533*463*308*1158333063 *4*192d.jpg*2***135573*800*533*463*308*1158333063 *5*192f.jpg*2***81054*800*533*463*308*1158333063 *6*192h.jpg*2***100851*800*533*463*308*1158333063 *7*192k.jpg*2***100237*800*533*463*308*1158333063 *8*193.jpg*2***106173*800*533*463*308*1158333063 *9*194.jpg*2***101731*800*533*463*308*1158333063 *10*195.jpg*2***136686*800*533*463*308*1158333063

il pimo numero indica l'ultimo indice scritto.

poi seguono delle righe contenenti i dati separati da 22 asterischi...

come faccio ad individuare tutte le occorrenze di un codice (tipo km1234) e poi ad estrapolare il dato subito antecedente il primo * (ossia l'indice della foto)?

risposto 10 anni fa
arjuna
X 0 X

L'indice della foto si trova sempre in una riga da solo?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

si, non è preceduto da asterischi, è il primo valore del file, sempre

risposto 10 anni fa
arjuna
X 0 X

Quindi a parte quel dieci iniziale tutte le altre righe sono nel formato con gli asterischi come separatori, giusto?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

si, esatto, ma non so come verificare le righe e quindi penso che l'altro dato importante sia il numero di asterischi.

ogni riga contiene 22 asterischi, infatti anche se i dati relativi all'asterisco non ci sono l'asterisco c'è (ovviamente).

quindi comincia una nuova riga ogni 22 asterischi.

risposto 10 anni fa
arjuna
X 0 X

Quarda questo script, dovrebbe essere sufficiente a farti realizzare la ricerca.

<?php

$file = '10
*1*185.jpg*2*km1234-km3214*&nbsp;*162994*800*533*463*308*1158333063
*2*189.jpg*2***143850*800*533*463*308*1158333063
*3*190.jpg*2***137143*800*533*463*308*1158333063
*4*192d.jpg*2***135573*800*533*463*308*1158333063
*5*192f.jpg*2***81054*800*533*463*308*1158333063
*6*192h.jpg*2***100851*800*533*463*308*1158333063
*7*192k.jpg*2***100237*800*533*463*308*1158333063
*8*193.jpg*2***106173*800*533*463*308*1158333063
*9*194.jpg*2***101731*800*533*463*308*1158333063
*10*195.jpg*2***136686*800*533*463*308*1158333063';


$file = explode("\n",$file);

unset($file[0]);

for ($i = 1; $i < count($file); $i++) {
   $file[$i] = explode('*',$file[$i]);
   unset($file[$i][0]);
}

print_r($file);

?>

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

posso essere sicuro che \n sia sempre accettato?

per esempio se printo semplicemente il contenuto del file a schermo il numero iniziale (l'indice) non va a capo...

eppure nell'editor di testo che uso per vedere il file si...

risposto 10 anni fa
arjuna
X 0 X

il browser usa il tag <br> per andare a capo.... prova a quardare l'HTML della pagina

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

non hai capito la mia obiezzione, non mi interessa stampare l'output... dicevo solo che non so se in un file di testo è sempre riconoscibile \n come new line (non per l'html ma per il php)

risposto 10 anni fa
arjuna
X 0 X

l' "a capo" contiene sempre il caratere \n

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

avevo iniziato con quel metodo poi ho scoperto che c'era una metodo della classe che gestiva il CMS che interroga il database è ho usato quello...

ora sto cercando di capire se c'è un server2go per mac in quanto il server virtuale che ho trovato funziona solo su win

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