Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18

Discussione: Help per una funzione

  1. #11
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Perche non costituisci la stringa cosi ?

    $str = " ... "."[var ".alg("[/T=var]")."]"." ... "."[var1 ".alg("[/T=var1]")."]" ecc.

    Di sicuro se non hai un delimitatore o un numero di caratteri fisso la vedo dura.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  2. #12
    Avevo pensato di cambiare la stringa.. ma, in realtà pensandoci il delimitatore c'è, solo che non è mai lo stesso;
    pensando tra me e me, sono arrivato alla conclusione che si puo fare anche con il tipo di STR che avevo proposto io, solo che il problema diventa di tipo logico.. non so come agire..
    più che altro non vorrei cambiare tipo di stringa perchè si tratta di prendere la stringa da un file, e come ben sai aumentando la lunghezza del file, si aumenta anche la lentezza dello script..

    Studiando ancora più a fondo pensavo di agire cosi:

    prendiamo una stringa facile da analizzare
    str = "1 3 6 4 8";
    8 rappresenta alg(var)
    4 è il value da prendere
    6 rappresenta alg(var2)
    3 il value di 6
    1 rappresenta alg(var3)
    Noi conosciamo la lista dei vari alg (*), quindi sappiamo che "8 6 1" sono i nostri delimitatori.
    siccome a noi serve il valore 4, appartenente a 8 , basta capire quale delimitatore è più vicino a 8, e di conseguenza eliminarlo con un explode (in modo che si elimino anche le altre cose che non servono). Ma come facciamo a capire quale delimitatore è piu "vicino" a quello che ci interessa?!

  3. #13
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Un delimitatore è qualcosa di fisso. Serve appunto a delimitare dati variabili.
    Nel tuo caso anche se sai qual'é non lo sai riperire quindi non é un delimitatore. Nel tuo caso penso che potresti avere str = "1 3 6 8 8".
    Se non vuoi aumentare la taglia del file puoi forse farne 2. Il primo per lo scopo iniziale (non so quale) e il secondo per questo problema.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #14
    Dai riapro un'altra discussione cosi che possano leggere tutti, perchè in via "teorica" senza modificare tutto si puo fare lo stesso

  5. #15
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    E fare un secondo file ci hai pensato ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #16
    Ma sta sintassi da cocainomani per le stringhe di testo chi l'ha pensata? L'esercizio o parliamo veramente di un caso di programmazione reale?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #17
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    La cosa migliore è cambiare il file...così l'unica soluzione potrebbe essere questa, ma credo che sia , molto più lenta rispetto a cambiare il file.

    Diciamo che hai una stringa così fatta:

    $str = blablablaABCDbbbaaaABEF_BAFEvvvvvEEBB

    Dove le parti in grassetto sono i tuoi alg()
    Se non ho capito male tu hai un alg(var) ed una lista di alg(*)
    es:
    $alg = ABEF
    $algs = {ABCD, ABEF, EEBB, BAFE, ABEF} //Con l'odine che può differire da quello della stringa

    In questo caso tu vorresti riprendere "bbbaaa".
    Quindi dovresti fare:

    Codice PHP:
    $end strpos($str$alg0);
    $start 0;
    $key = -1;
    foreach(
    $algs as $k => $a){
        if(
    $a == $alg) continue;
        
    $tmp strpos($str$a0);
        if(
    $tmp  !== FALSE && $tmp $end && $tmp >= $start ) {
            
    $start $tmp;
            
    $key $k;
        }
    }


    if(
    $key != -1){
       
    $start += strlen($algs[$key]);
    }

    echo 
    substr($str$start$end-$start); 
    Non l'ho testato, ma credo che forse dovresti rivedere gli indici $start ed $end per i casi particolari (tipo se alg(var) è il primo e non c'è la parte a sx).

    Cmq, ti consiglio di rivedere la struttura della stringa...

  8. #18
    Originariamente inviato da boots
    La cosa migliore è cambiare il file...così l'unica soluzione potrebbe essere questa, ma credo che sia , molto più lenta rispetto a cambiare il file.

    Diciamo che hai una stringa così fatta:

    $str = blablablaABCDbbbaaaABEF_BAFEvvvvvEEBB

    Dove le parti in grassetto sono i tuoi alg()
    Se non ho capito male tu hai un alg(var) ed una lista di alg(*)
    es:
    $alg = ABEF
    $algs = {ABCD, ABEF, EEBB, BAFE, ABEF} //Con l'odine che può differire da quello della stringa

    In questo caso tu vorresti riprendere "bbbaaa".
    Quindi dovresti fare:

    Codice PHP:
    $end strpos($str$alg0);
    $start 0;
    $key = -1;
    foreach(
    $algs as $k => $a){
        if(
    $a == $alg) continue;
        
    $tmp strpos($str$a0);
        if(
    $tmp  !== FALSE && $tmp $end && $tmp >= $start ) {
            
    $start $tmp;
            
    $key $k;
        }
    }


    if(
    $key != -1){
       
    $start += strlen($algs[$key]);
    }

    echo 
    substr($str$start$end-$start); 
    Non l'ho testato, ma credo che forse dovresti rivedere gli indici $start ed $end per i casi particolari (tipo se alg(var) è il primo e non c'è la parte a sx).

    Cmq, ti consiglio di rivedere la struttura della stringa...
    Mi hai illuminato..
    E siccome sono cosi incapace a leggere il tuo script, ne ho creato uno sulla tua falsa riga, penso che il ragionamento sia lo stesso

    Codice PHP:
    $str     "1[/T=tu]7dsa[/T=tot]78[/T=titi][/T=tatas]6666sd[/T=t]"
    $delimiters = array("[/T=tu]","[/T=tot]","[/T=titi]","[/T=tatas]","[/T=t]");
    $delimiter "[/T=t]";
    $mul 0;

    function 
    finding($str$delimiters$delimiter){
        
        
    $mul 0;
        
        foreach(
    $delimiters as $key=>$value) {
                
    $pos[$value] = strpos($str,$value,0);
        }
        
        
    asort($pos);
        
        
    $delimiters = array();
        
        foreach(
    $pos as $key=>$value) {
                
    $delimiters[] = $key;
        }
        
        foreach(
    $delimiters as $key=>$value) {
            if (
    $value == $delimiter){ 
                
    $algs_l[0][$delimiter] = strpos($str,$value,0);
                
    $algs_l[0]["count"] = $mul-1;
                
    $algs_l[1][$delimiter] = strlen($value);
                
            }else{
                
    $algs_l[0][] = strpos($str,$value,0);
                
    $algs_l[1][] = strlen($value);
            }
            
            
    $mul++;
        }
        
        
    $start $algs_l[0][$algs_l[0]["count"]]+$algs_l[1][$algs_l[0]["count"]];
        
    $end $algs_l[0][$delimiter]-$start;
        
        return 
    substr($str,$start,$end);

    Funziona con qualsiasi numero di delimitatori, qualsiasi sia la sua lunghezza, qualsiasi lunghezza del valore e non devo gestire l'eccezione se il delimitatore è primo o ultimo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.