[PHP] Estrapolare testo da una stringa

teapikia

Nuovo Utente
24 Nov 2012
10
0
0
Come da titolo, vorrei sapere se fosse possibile scrivere un codice magari in javascript (ma se impossibile anche in php) con le seguenti istruzioni

cancella il file.txt se esistente
scarica un file da un url e rinominalo in txt
da quel file di testo, estrapola il testo compreso fra a e b
copia il testo estrapolato in una porzione di un altro file html
cancella il file txt

tutto questo deve essere richiamato ogni volta che la pagina html viene caricata


si può?
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao
piu semplice con PHP
potresti iniziare cosi
PHP:
<?php

if (file_exists("file.txt")) {
    unlink("file.txt");
}

$file = "http://www.sito.it/file.txt";
// apri il file in lettura
$fr = fopen($file, 'r');
while (!feof($fr)) {
    // estrai la riga
    $riga = fgets($fr);
    // la leggi
    echo $riga . "<br/>";
}
fclose($fr);
?>
sposto la discussione
 

teapikia

Nuovo Utente
24 Nov 2012
10
0
0
grazie criric;
non mi è chiaro pero un passaggio:

quando si deve estrapolare il contenuto del file rinominato: come faccio a mettere qual'è il testo da copiare compreso fra due caratteri? Perche il testo da copiare è solo una parte del contenuto del txt, non tutto (sono riuscito a modificare l'impostazione del file da scaricare di modo che si deve copiare ad esempio non fra A e B ma solo da A in poi [testo di esempio A testo da copiare)
 

teapikia

Nuovo Utente
24 Nov 2012
10
0
0
Ciao
piu semplice con PHP
potresti iniziare cosi
PHP:
<?php

if (file_exists("file.txt")) {
    unlink("file.txt");
}

$file = "http://www.sito.it/file.txt";
// apri il file in lettura
$fr = fopen($file, 'r');
while (!feof($fr)) {
    // estrai la riga
    $riga = fgets($fr);
    // la leggi
    echo $riga . "<br/>";
}
fclose($fr);
?>
sposto la discussione
Più precisamente, se poniamo ad esempio il testo

Lorem ipsum dolor sit amet consectetuer adipiscing elit.

con la parte prima di amet fissa e quella dopo sempre variabile, come faccio a inserire nel codice che mi hai postato, l'istruzione leggi da amet (incluso) in poi e copia il testo ottenuto in una specifica porzione di un html semplice (che è a se stante dal file php che ha queste istruzioni)
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
questa potrebbe essere una soluzione
PHP:
$riga = "Nel mezzo del cammin di nostra vita mi ritrovai per una selva oscura che la diritta via era smarrita.";
$inizio = strpos($riga, "mi ritrovai");
$fine = strpos($riga, "che la");
$chr_da_estrarre = $fine - $inizio;

$nuova_riga = substr($riga, $inizio, $chr_da_estrarre);

echo $nuova_riga;
le funzioni che ho usato sono strpos() substr()

per estrarre tutto il resto della riga non ti serve calcolare il $chr_da_estrarre puoi semplicemente scrivere
PHP:
$nuova_riga = substr($riga, $inizio);
non so se esistono altre funzioni piu specifiche per fare quello che ti serve
 

teapikia

Nuovo Utente
24 Nov 2012
10
0
0
questa potrebbe essere una soluzione
PHP:
$riga = "Nel mezzo del cammin di nostra vita mi ritrovai per una selva oscura che la diritta via era smarrita.";
$inizio = strpos($riga, "mi ritrovai");
$fine = strpos($riga, "che la");
$chr_da_estrarre = $fine - $inizio;

$nuova_riga = substr($riga, $inizio, $chr_da_estrarre);

echo $nuova_riga;
le funzioni che ho usato sono strpos() substr()

per estrarre tutto il resto della riga non ti serve calcolare il $chr_da_estrarre puoi semplicemente scrivere
PHP:
$nuova_riga = substr($riga, $inizio);
non so se esistono altre funzioni piu specifiche per fare quello che ti serve
scusa ancora il disturbo, ma ho quasi capito

l'unica cosa è questa: quando scrivi $riga = "Nel mezzo del cammin di nostra vita mi ritrovai per una selva oscura che la diritta via era smarrita."; presupponi che la frase sia sempre la medesima; ma nel caso in cui variasse ad esempio l'ultima parola "smarrita" come si fa? Ho cercato di mettere insieme i pezzi del primo codice che mi hai postato e di quest'ultimo ma non so come inserire il comando in $riga che faccia capire che l'ultima parola è variabile ed e proprio quella variabile da copiare
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
non so se sono riuscito a capire cmq puoi provare cosi
PHP:
<?php

$file = "http://www.sito.it/file.txt";
// apri il file in lettura
$fr = fopen($file, 'r');
// valorizzi una variabiel per il contenuto
$contenuto = "";
while (!feof($fr)) {
    // estrai la riga
    $riga = fgets($fr);
    // recuperi l'intero da cui inizare a leggere la riga
    $inizio = strpos($riga, "parola da cercare");
    // memorizzi la nuova riga
    $nuova_riga = substr($riga, $inizio);
    // prepari il contenuto per il nuovo file
    $contenuto .= $nuova_riga . "\n";
}
// chiudi
fclose($fr);
// apri il tuo file in scrittura
$fr = fopen("tuo_file.txt", 'w');
// scrivi il contenuto
fwrite($fr, $contenuto);
// chiudi
fclose($fr);
?>
in questo modo leggi il file e scrivi quello che ti interessa in un tuo file
la pagina html la trasformerei in php in modo che possa autonomamente andare a leggere il file e memorizzarne il contenuto in una variabile
non ti serve controllare se esiste il tuo file perche se esiste verrà sovrascritto se non esiste verrà creato
Ma la riga che recuperi è una sola?
 

teapikia

Nuovo Utente
24 Nov 2012
10
0
0
si la riga che recupero è una sola, ma varia ogni tot perche fa parte di un database; la parte che mi serve recuperare (è che è l'unica variabile) è al termine di questa riga

adesso vedo se funziona ma mi sembra perfetto! Dovrei riuscirci

Grazie mille!
 

teapikia

Nuovo Utente
24 Nov 2012
10
0
0
non so se sono riuscito a capire cmq puoi provare cosi
PHP:
<?php

$file = "http://www.sito.it/file.txt";
// apri il file in lettura
$fr = fopen($file, 'r');
// valorizzi una variabiel per il contenuto
$contenuto = "";
while (!feof($fr)) {
    // estrai la riga
    $riga = fgets($fr);
    // recuperi l'intero da cui inizare a leggere la riga
    $inizio = strpos($riga, "parola da cercare");
    // memorizzi la nuova riga
    $nuova_riga = substr($riga, $inizio);
    // prepari il contenuto per il nuovo file
    $contenuto .= $nuova_riga . "\n";
}
// chiudi
fclose($fr);
// apri il tuo file in scrittura
$fr = fopen("tuo_file.txt", 'w');
// scrivi il contenuto
fwrite($fr, $contenuto);
// chiudi
fclose($fr);
?>
in questo modo leggi il file e scrivi quello che ti interessa in un tuo file
la pagina html la trasformerei in php in modo che possa autonomamente andare a leggere il file e memorizzarne il contenuto in una variabile
non ti serve controllare se esiste il tuo file perche se esiste verrà sovrascritto se non esiste verrà creato
Ma la riga che recuperi è una sola?
ho fatto così ma non va
PHP:
<?php

$file = "http://hephiavu.altervista.org/Database.xml";
// apri il file in lettura
$fr = fopen($file, 'r');
// valorizzi una variabile per il contenuto
$contenuto = "=";
while (!feof($fr)) {
    // estrai la riga
    $riga = fgets($fr);
    // recuperi l'intero da cui iniziare a leggere la riga
    $inizio = strpos($riga, "NOME ID=");
    // memorizzi la nuova riga
    $nuova_riga = substr($riga, $inizio);
    // prepari il contenuto per il nuovo file
    $contenuto .= $nuova_riga . "\n";
}
// chiudi
fclose($fr);
// apri il tuo file in scrittura
$fr = fopen("Result.txt", 'w');
// scrivi il contenuto
fwrite($fr, $contenuto);
// chiudi
fclose($fr);
?>
ho sbagliato qualcosa?

Come vedi la struttura del file da prelevare (che è xml) e come quella di quel file di esempio; la parte variabile è quella dopo l'uguale, che è quella da copiare in un altro txt (o comunque da inserire poi mettendo tutto il codice php nell'html nella porzione desiderata); non è che prima bisogna dare il comando di rinomina del xml in txt?

NOME ID=1656499
 
Ultima modifica di un moderatore:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
nel file tra ID e = c'è uno spazio
PHP:
// recuperi l'intero da cui iniziare a leggere la riga
$inizio = strpos($riga, "NOME ID =");
a parte questo a me funziona
cos'è che non ti va?
la strutura di un xml cmq non è come quella dell'esempio
 

teapikia

Nuovo Utente
24 Nov 2012
10
0
0
nel file tra ID e = c'è uno spazio
PHP:
// recuperi l'intero da cui iniziare a leggere la riga
$inizio = strpos($riga, "NOME ID =");
a parte questo a me funziona
cos'è che non ti va?
la strutura di un xml cmq non è come quella dell'esempio
ho caricato tutto il codice sopra postato in un php (ho corretto l'uguale)

e non mi salva il txt, quindi non so se funziona http://hephiavu.altervista.org/index.php

(si lo so che non è la struttura xml, ma è un esempio "pulito" per far bene capire qual'è la variabile che vorrei venisse copiata)
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
te lo salva nella stessa cartella dove hai messo il codice php
o se lo vuoi in un altra cartella devi indicare il percorso
a me in locale lo salva
 

teapikia

Nuovo Utente
24 Nov 2012
10
0
0
te lo salva nella stessa cartella dove hai messo il codice php
o se lo vuoi in un altra cartella devi indicare il percorso
a me in locale lo salva
ma ti salva solo il numero 1656499 ?
Su altervista da errore, ma se dici che in locale ti salva un txt di nome Results.txt con dentro solo 1656499, allora va bene e ci studio sopra io. Mi serve solo una conferma

e se volessi salvare il txt risultante in una cartella dropbox sarebbe possibile? (non il php, solo il txt)
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
no mi salva il file Result con dentro NOME ID = 1656499
avevo capito che doveva essere compresa la parola chiave

puoi sempre eliminarla prima di salvare il contenuto
PHP:
// imposti la chiave di ricerca 
    $chiave_ricerca = "NOME ID =";
    // recuperi l'intero da cui iniziare a leggere la riga
    $inizio = strpos($riga, $chiave_ricerca);
    // memorizzi la nuova riga
    $nuova_riga = substr($riga, $inizio);
    // elimini la chiave
    $nuova_riga = str_replace($chiave_ricerca, "", $riga);
    // prepari il contenuto per il nuovo file
    $contenuto .= $nuova_riga . "\n";
la cartella che conterrà il file deve avere i permessi in lettura e scrittura
al massimo puoi creare una cartella apposita e impostare i permessi
poi dovrai modificare il percorso
PHP:
// apri il tuo file in scrittura
$fr = fopen("cartella_con_permessi/tuo_file.txt", 'w');
edit:
cos'è dropbox ?
 

teapikia

Nuovo Utente
24 Nov 2012
10
0
0
no mi salva il file Result con dentro NOME ID = 1656499
avevo capito che doveva essere compresa la parola chiave

puoi sempre eliminarla prima di salvare il contenuto
PHP:
// imposti la chiave di ricerca 
    $chiave_ricerca = "NOME ID =";
    // recuperi l'intero da cui iniziare a leggere la riga
    $inizio = strpos($riga, $chiave_ricerca);
    // memorizzi la nuova riga
    $nuova_riga = substr($riga, $inizio);
    // elimini la chiave
    $nuova_riga = str_replace($chiave_ricerca, "", $riga);
    // prepari il contenuto per il nuovo file
    $contenuto .= $nuova_riga . "\n";
la cartella che conterrà il file deve avere i permessi in lettura e scrittura
al massimo puoi creare una cartella apposita e impostare i permessi
poi dovrai modificare il percorso
PHP:
// apri il tuo file in scrittura
$fr = fopen("cartella_con_permessi/tuo_file.txt", 'w');
edit:
cos'è dropbox ?
PHP:
<?php

$file = "http://hephiavu.altervista.org/Database.xml";
// apri il file in lettura
$fr = fopen($file, 'r');
// valorizzi una variabile per il contenuto
$contenuto = "=";
while (!feof($fr)) {
    // estrai la riga
    $riga = fgets($fr);
    // imposti la chiave di ricerca 
    $chiave_ricerca = "NOME ID=";
    // recuperi l'intero da cui iniziare a leggere la riga
    $inizio = strpos($riga, $chiave_ricerca);
    // memorizzi la nuova riga
    $nuova_riga = substr($riga, $inizio);
    // elimini la chiave
    $nuova_riga = str_replace($chiave_ricerca, "", $riga);
    // prepari il contenuto per il nuovo file
    $contenuto .= $nuova_riga . "\n";
}
// chiudi
fclose($fr);
// apri il tuo file in scrittura
$fr = fopen("cartella_con_permessi/Result.txt", 'w');
// scrivi il contenuto
fwrite($fr, $contenuto);
// chiudi
fclose($fr);
?>
cosi dovrebbe essere corretto, giusto?

Dropbox è un servizio utilissimo che ti permette di tenere sincronizzati i file su piu dispositivi o comunque di uploadare file di varia natura https://www.dropbox.com
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
hai tolto di nuovo lo spazio nell chiave di ricerca
poi se valorizzi cosi il contenuto
PHP:
// valorizzi una variabile per il contenuto
$contenuto = "=";
il file inizierà con l'uguale io non lo avevo messo
dovrebbe funzionare
il percorso della cartella deve essere corretto a partire dalla cartella che conterrà questo script
 

teapikia

Nuovo Utente
24 Nov 2012
10
0
0
hai tolto di nuovo lo spazio nell chiave di ricerca
poi se valorizzi cosi il contenuto
PHP:
// valorizzi una variabile per il contenuto
$contenuto = "=";
il file inizierà con l'uguale io non lo avevo messo
dovrebbe funzionare
il percorso della cartella deve essere corretto a partire dalla cartella che conterrà questo script
ah, si nel "originale" correggo. E gia che ci sono tolgo = dalle "", di modo che inizi solo con la parte variabile; allora è tutto ok.

Grazie ancora e buona serata!
 

giannit

Nuovo Utente
30 Mar 2017
31
2
8
54
Ciao, mi accodo alla discussione che anche se datata mi è tornata utilissima, ma avrei una domanda da porre, sto cercando di mettere un array per la ricerca di più termini come chiave di ricerca, ma continuo ad avere errori alla riga 12, ho modificato in questo modo lo script evidentemente sbaglio ma non capisco dove. Grazie
  • Codice:
    <?php
    $nomi = array ("giorgio","nicola","filippo");
    $file = "https://www.pincopallino.com/file.txt";
    // apri il file in lettura
    $fr = fopen($file, 'r');
    // valorizzi una variabiel per il contenuto
    $contenuto = "";
    while (!feof($fr)) {
        // estrai la riga
        $riga = fgets($fr);
        // recuperi l'intero da cui inizare a leggere la riga
        $inizio = (strpos($riga, $nomi))  ;
        // memorizzi la nuova riga
        $nuova_riga = substr($riga, $inizio);
        // prepari il contenuto per il nuovo file
        $contenuto .= $nuova_riga . "\n";
    }
    // chiudi
    fclose($fr);
    // apri il tuo file in scrittura
    $fr = fopen("nuovo.txt", 'w');
    // scrivi il contenuto
    fwrite($fr, $contenuto);
    // chiudi
    fclose($fr);
    ?>
 

giannit

Nuovo Utente
30 Mar 2017
31
2
8
54
Mi rispondo da solo, anche se poco ortodossa probabilmente, riapro il file e con un array faccio le ulteriori sostituzioni
  • Codice:
    $st = str_replace(array('testo1','testo2'),array('nuovo1','nuovo2'),file_get_contents('file.txt',true));
    fwrite(fopen('newfile.txt','w'),$st);
 
Ultima modifica: