Estrapolare stringhe da una funzione

marcomg

Utente Attivo
19 Nov 2011
204
0
16
Diciamo che il abbia un file php piuttosto complesso che sia simile a questo:
PHP:
<?php
strana_funzione('asdrubalino');
strana_funzione("vincenzino");
echo(strana_funzione("pinco").strana_funzione('pallino'));
?>

Mi servirebbe un file php che leggendo il file precedente sia in grado estrapolare tutte le stringhe che si trovano in strana_funzione("qualcosa"); o strana_funzione('qualcosa'); e le inserisca in un array. Sapete come potrei fare? E nel caso ci fosse un escape esempio strana_funzione("qualcosa: \" ahahah \"")?

Grazie!
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao,
a me è venuto in mente questo
PHP:
<?php

$file = "nome_file.php";
$array = array();

// primo ciclo per apici doppi
$fr = fopen($file, 'r');
while (!feof($fr)) {
    $riga = fgets($fr);
    $inizio_ricerca = "(\"";
    $fine_ricerca = "\")";
    $inizio = strpos($riga, $inizio_ricerca);
    $fine = strpos($riga, $fine_ricerca);
    $chr_da_estrarre = $fine - $inizio;
    $parola = substr($riga, $inizio, $chr_da_estrarre);
    $parola = str_replace($inizio_ricerca, "", $parola);
    if (!empty($parola)) {
        $array[] = $parola;
    }
}
fclose($fr);

// secondo ciclo per apici singoli
$fr = fopen($file, 'r');
while (!feof($fr)) {
    $riga = fgets($fr);
    $inizio_ricerca = "('";
    $fine_ricerca = "')";
    $inizio = strpos($riga, $inizio_ricerca);
    $fine = strpos($riga, $fine_ricerca);
    $chr_da_estrarre = $fine - $inizio;
    $parola = substr($riga, $inizio, $chr_da_estrarre);
    $parola = str_replace($inizio_ricerca, "", $parola);
    if (!empty($parola)) {
        $array[] = $parola;
    }
}

fclose($fr);
var_dump($array);
?>
avevamo fatto qualcosa di simile in questa discussione
non ho commentato se hai bisogno chiedi pure
 

marcomg

Utente Attivo
19 Nov 2011
204
0
16
Scusami, ma non mi è chiara una cosa. Credo ci sia un problema con la stampa del tutto:
File che estrapola:
PHP:
#!/usr/bin/php
<?php
function string_to_translate_search($file, $function_name='translate'){
    //$file = "nome_file.php";
    $array = array();

    // primo ciclo per apici doppi
    $fr = fopen($file, 'r');
    while (!feof($fr)) {
        $riga = fgets($fr);
        $inizio_ricerca = $function_name."(\"";
        $fine_ricerca = "\")";
        $inizio = strpos($riga, $inizio_ricerca);
        $fine = strpos($riga, $fine_ricerca);
        $chr_da_estrarre = $fine - $inizio;
        $parola = substr($riga, $inizio, $chr_da_estrarre);
        $parola = str_replace($inizio_ricerca, "", $parola);
        if (!empty($parola)) {
            $array[] = $parola;
        }
    }
    fclose($fr);

    // secondo ciclo per apici singoli
    $fr = fopen($file, 'r');
    while (!feof($fr)) {
        $riga = fgets($fr);
        $inizio_ricerca = $function_name."('";
        $fine_ricerca = "')";
        $inizio = strpos($riga, $inizio_ricerca);
        $fine = strpos($riga, $fine_ricerca);
        $chr_da_estrarre = $fine - $inizio;
        $parola = substr($riga, $inizio, $chr_da_estrarre);
        $parola = str_replace($inizio_ricerca, "", $parola);
        if (!empty($parola)) {
            $array[] = $parola;
        }
    }

    fclose($fr);
    var_dump($array);
    return $array;
}

$array = string_to_translate_search('main.php');
echo(implode(PHP_EOL, $array);
?>

File main.php

PHP:
#!/usr/bin/php
<?php
require('locale.class.php');
$ln = 'en';// La lingua dove si anreà traducendo
$local_dir = './';// La cartella dove di dovranno pescare i file
$ln_file_extension = '.translate'; // Estensione del file della lingua es: .txt
$locale = new LOCALE($ln, $local_dir, $ln_file_extension);

echo($locale->translate('HALLO'));
?>

Cosa stampa lo script:

Codice:
marco@ACER:~/Immagini/translate_class$ ./translation_file_generator.php
array(2) {
  [0]=>
  string(16) "locale.class.php"
  [1]=>
  string(5) "HALLO"
}
locale.class.php
HALLOmarco@ACER:~/Immagini/translate_class$

Mi sembra che non funzioni.

Grazie dell'aiuto!
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
aggiungi un controllo sul risultato della prima ricerca
PHP:
if ($inizio !== false) {
        $fine = strpos($riga, $fine_ricerca);
        $chr_da_estrarre = $fine - $inizio;
        $parola = substr($riga, $inizio, $chr_da_estrarre);
        $parola = str_replace($inizio_ricerca, "", $parola);
        if (!empty($parola)) {
            $array[] = $parola;
        }
    }
se non trovi translate(' salti tutto il resto

edit:
qui ti sei dimenticato una parentesi ) a chiusura
PHP:
echo(implode(PHP_EOL, $array);
 
Ultima modifica:

marcomg

Utente Attivo
19 Nov 2011
204
0
16
Scusami criric, ma non ci sto capendo un gran che.
Dato il file main.php
PHP:
<?php
// Includo la classe
require('translator.class.php');

// Istanzio la classe
$local = new TRANSLATOR('languages/', 'it');

echo($local->translate('HALLO'));
echo($local->translate('WORLD'));

?>

e il file che hai fatto tu:

PHP:
<?php
/*
CONFIGURAZIONE
*/
$ln_separator = '|~|';
$source_dir = './';

/*
FUNZIONI
*/

// Questa funzione elenca i percorsi dei files
function files_find($dirname){
	$arrayfiles=Array();
	if(file_exists($dirname)){
		$handle = opendir($dirname);
		while (false !== ($file = readdir($handle))) { 
			if(is_file($dirname.$file)){
				array_push($arrayfiles, $dirname.$file);
			}
		}
		$handle = closedir($handle);
	}
	sort($arrayfiles);
	return $arrayfiles;
}

function string_to_translate_search($file, $function_name='translate'){
    //$file = "nome_file.php";
    $array = array();

    // primo ciclo per apici doppi
    $fr = fopen($file, 'r');
    while (!feof($fr)) {
        $riga = fgets($fr);
        $inizio_ricerca = $function_name."(\"";
        $fine_ricerca = "\")";
        $inizio = strpos($riga, $inizio_ricerca);
        $fine = strpos($riga, $fine_ricerca);
        $chr_da_estrarre = $fine - $inizio;
        $parola = substr($riga, $inizio, $chr_da_estrarre);
        $parola = str_replace($inizio_ricerca, "", $parola);
        if (!empty($parola)) {
            $array[] = $parola;
        }
    }
    fclose($fr);

    // secondo ciclo per apici singoli
    $fr = fopen($file, 'r');
    while (!feof($fr)) {
        $riga = fgets($fr);
        $inizio_ricerca = $function_name."('";
        $fine_ricerca = "')";
        $inizio = strpos($riga, $inizio_ricerca);
        $fine = strpos($riga, $fine_ricerca);
        $chr_da_estrarre = $fine - $inizio;
        $parola = substr($riga, $inizio, $chr_da_estrarre);
        $parola = str_replace($inizio_ricerca, "", $parola);
        if (!empty($parola)) {
            $array[] = $parola;
        }
    }

    fclose($fr);
    var_dump($array);
    return $array;
}

/*
SCRIPT
*/

// Recupero i files
$files = files_find($source_dir);
$strings = string_to_translate_search('main.php');
echo(implode(PHP_EOL, $strings));
?>

Mi viene stampato a video questo:
Codice:
marco@ACER:~/Scrivania/php-translator-code$ php ./translation_create.php
array(4) {
  [0]=>
  string(29) "require('translator.class.php"
  [1]=>
  string(41) "$local = new TRANSLATOR('languages/', 'it"
  [2]=>
  string(5) "HALLO"
  [3]=>
  string(5) "WORLD"
}
require('translator.class.php
$local = new TRANSLATOR('languages/', 'it
HALLO
WORLD

Invece non capisco perché stampa tutta questa robaccia. Dovrebbe solamente stampare
Codice:
HALLO
WORLD

Puoi aiutarmi a risolvere?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
devi aggiungere anche quella if che ti avevo indicato altrimenti ti stampa anche tutte le righe che contengono ")
ma che non iniziano con translate("
PHP:
<?php

function string_to_translate_search($file, $function_name='translate') {
    //$file = "nome_file.php";
    $array = array();

    // primo ciclo per apici doppi
    $fr = fopen($file, 'r');
    while (!feof($fr)) {
        $riga = fgets($fr);
        $inizio_ricerca = $function_name . "(\"";
        $fine_ricerca = "\")";
        $inizio = strpos($riga, $inizio_ricerca);
        if ($inizio !== false) {
            $fine = strpos($riga, $fine_ricerca);
            $chr_da_estrarre = $fine - $inizio;
            $parola = substr($riga, $inizio, $chr_da_estrarre);
            $parola = str_replace($inizio_ricerca, "", $parola);
            if (!empty($parola)) {
                $array[] = $parola;
            }
        }
    }
    fclose($fr);

    // secondo ciclo per apici singoli
    $fr = fopen($file, 'r');
    while (!feof($fr)) {
        $riga = fgets($fr);
        $inizio_ricerca = $function_name . "('";
        $fine_ricerca = "')";
        $inizio = strpos($riga, $inizio_ricerca);
        if ($inizio !== false) {
            $fine = strpos($riga, $fine_ricerca);
            $chr_da_estrarre = $fine - $inizio;
            $parola = substr($riga, $inizio, $chr_da_estrarre);
            $parola = str_replace($inizio_ricerca, "", $parola);
            if (!empty($parola)) {
                $array[] = $parola;
            }
        }
    }

    fclose($fr);
    return $array;
}

$array = string_to_translate_search('main.php');
echo(implode(PHP_EOL, $array));
?>
 

marcomg

Utente Attivo
19 Nov 2011
204
0
16
Ok, grazie, ora funge. Solo un'altra cosa. Nel caso ci fossero più di una funzione a riga?

PHP:
echo($local->translate('WORLD').($local->translate('CIAO'));
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
la situazione si complica un po:
la funzione strpos accetta anche un terzo parametro guarda qui
potresti sfruttarlo per trovare ulteriori ricorrenze
al momento non mi viene in mente niente di intelligente ma la soluzione c'è sicuramente
 
Discussioni simili
Autore Titolo Forum Risposte Data
A Estrapolare parti di testo con PHP PHP 2
M Estrapolare singoli record da intervallo (dal al/inizio fine) MS Access 0
max1974 [MySQL] Estrapolare record finti/inisistenti MySQL 9
G [HTML] estrapolare link da pagina web HTML e CSS 9
C [PHP] Estrapolare solo l'anno da una data di nascita inserita in un campo PHP 8
J [PHP] Estrapolare utente dominio da pc PHP 2
Francesco Oliviero Estrapolare HTML da questo sito (intera Range Slider) HTML e CSS 1
R [PHP] Estrapolare dati da una query left join PHP 0
G [RISOLTO][PHP] Estrapolare dati da Tabella PHP 11
S estrapolare i dati da una tabella e farli diventare varibili PHP 1
SimooRu Estrapolare dati da sito Sviluppo app per Android 1
S Come estrapolare nomi colonne tabella e affiancare Input Radio PHP 16
W Estrapolare un indirizzo mail di un form durante l'invio PHP 5
A Regex per estrapolare url da testo PHP 5
R estrapolare numeri PHP 2
bit77 Domanda! ho un file xml e devo estrapolare determinati testi, php è la soluzione? PHP 0
S estrapolare max(id) dal database. PHP 2
M estrapolare dati xml PHP 2
M Estrapolare imagini da pagina PHP e fare iframe PHP 3
M Sapete estrapolare file flash di bravo c3 softworks? Flash 0
T [PHP] Estrapolare testo da una stringa PHP 18
M estrapolare dei dati da 4 tabelle sql PHP 7
C estrapolare da documento solo numeri Javascript 3
M estrapolare un listino prodotti da db Classic ASP 7
MarcoGrazia Operatore IN e stringhe CSV PHP 3
F confrontare due stringhe "numeriche" PHP 7
Alex_70 Stringhe duplicate PHP 36
R Tradurre stringhe con php e google translator PHP 4
A Cercare un carattere uguale in due stringhe Java 5
P [PHP] Inserire stringhe in input(text),memorizzarle e stamparle in file successivo PHP 0
E [PHP] confrontare stringhe importate da csv PHP 19
M [PHP] Stringhe con accento nel POST PHP 3
M [java] esercizio lunghezza array di stringhe Java 0
K [WordPress] editare stringhe di deafault WordPress 0
S [Javascript] [HTML] creare stringhe di riferimento da riutilizzare Javascript 5
B [Java] Stringhe binarie Java 0
venomina [MySQL] Stringhe vuote MySQL 0
E [PHP] Operazioni di confronto su stringhe PHP 26
G [PHP] Operazioni sulle stringhe PHP 2
D [Problema] Comparare stringhe Sviluppo app per Android 0
S stringhe con caratteri speciali PHP 3
A Problema con stringhe e numeri interi PHP 2
M Stringhe con caratteri non codificati (es. �) PHP 1
xone Filtrare e ripulire stringhe in input PHP 1
F Controllo tra due stringhe jQuery 5
K formattazione stringhe Javascript 1
K alcuni chiarimenti sul metodo di ricerca nelle stringhe o array Javascript 1
K problema di sintassi con le stringhe PHP 5
F spazi stringhe PHP 3
N Confrontare due Stringhe PHP 2

Discussioni simili