Newsgroup: it.comp.www.php
Titolo: comparazione di stringhe

Ciao,
avrei bisogno di un aiuto:
ho un array di stringhe e estrendo le stringhe dall'array devo verificare se
la stringa contenuta in una variabile passata via form é identica ad una
delle stringhe dell'array. Il codice che ho scritto sembra corretto ma la
comparazione di stringhe non va a buon fine!
Ho scritto la funzione in due modi diversi ma ottengo lo stesso risultato:
1° CASO
function modifica ($file,$app,$app1)
            {
             $array = file("$file");
             touch("data1/miofile1");
             $fd = fopen("data1/miofile1","a");
             foreach ($array as $target)
               {
                echo "<br>\n";
                echo "$target" . " - " . "$app";
                if ("$target" != "$app")
                 {
                  fwrite($fd,"$target");
                 }
               }
             fclose($fd);
             $fd = fopen("data1/miofile1","a");
             fwrite($fd,"$app1");
             fclose($fd);
2° CASO
function modifica ($file,$app,$app1)
            {
             $array = file("$file");
             touch("data1/miofile1");
             $fd = fopen("data1/miofile1","a");
             foreach ($array as $target)
               {
                echo "<br>\n";
                echo "$target" . " - " . "$app";
                echo $res;
                $res = strcmp("$target", "$app)
                if ($target != 0)
                 {
                  fwrite($fd,"$target");
                 }
               }
             fclose($fd);
             $fd = fopen("data1/miofile1","a");
             fwrite($fd,"$app1");
             fclose($fd);
Aiutatemi :-(

 Aiutatemi :-(
Concentrati ;-)
J.

Ti riscrivo il codice corretto e ti espongo il problema:
function perl_chop ($string) {
$last_char = substr ($string, -1);
$chopped_string = ereg_replace ("$last_char$", "", $string);
return $chopped_string;
}
function modifica ($file,$app,$app1)
            {
             $array = file("$file");
             touch("data1/miofile1");
             $fd = fopen("data1/miofile1","a");
             foreach ($array as $target)
               {
                echo "<br>\n";
                echo "|$target|" . " - " . "|$app|";
                $target1 = perl_chop ($target);
                $res = strcmp ("$target1", "$app");
                echo $res;
                if ($res != 0)
                 {
                  fwrite($fd,"$target");
                 }
               }
             fwrite($fd,"$app1");
             fclose($fd);
             exec("$cmd >/dev/null &");
             exec("$cmd1 >/dev/null &");
             unlink("data1/miofile1");
            }
Ok ora diciamo che funziona il problema vero é quando la stringa da
sostituire si trova in fondo al file, in questo caso non ci sono ritorni a
capo dopo la stringa e la funzione perl_chop mi taglia l'ultimo carattere
quindi il controllo se le stringhe sono uguali va a farsi benedire!!!
Sono stato chiaro?
Adesso sono concentrato, M'aiutate?

 wrote in message
news:RQex7.4574$YC3.1...@news1.tin.it...


 Adesso sono concentrato, M'aiutate?
Certo...
dovresti sostituire solo i "\n" con "", per il fatto che file cmq. ti
riporta tutte le righe con '\n' tranne a volte l'ultima potresti fare con
questa funzione:
function newChop($string)
{
    if (strlen($string))
    {
        if ($string{strlen($string)-1} == '\n')
            return substr ($string, 0, strlen($string)-1);
    }
    return $string;
}
ma si puo' anche risolvere con altri metodi

             fclose($fd);
<PRE><?
// Modifica una stringa, se presente, sostituendola con "nuova".
// Altrimenti, aggiunge "nuova" in fondo al file.
// Se il file non esiste, viene creato. Se la stringa "aggiungi"
// e' vuota, solo "elimina" viene eliminata.
// Se "elimina" e' vuota, solo "aggiungi" viene aggiunta.
function modifica ($file, $elimina, $aggiungi="")
{
        $cerca = "$elimina\n";
        $gp = fopen("$file.bak", "w");
        if (NULL != ($fp = @fopen("$file", "r")))
        {
                while(!feof($fp))
                {
                        $buffer = fgets($fp, 1024);
                        if ($buffer != $cerca)
                        {
                                fwrite($gp, $buffer);
                        }
                }
                @fclose($fp);
        }
        if ($aggiungi!="")
        {
                fwrite($gp, "$aggiungi\n");
        }
        @fclose($gp);
        rename("$file.bak", "$file");	// Sostituzione atomica
        // DEBUG - REMOVE THIS IN PRODUCTION SITE
        print "<HR SIZE=1>";
        readfile("$file");
}
	// DEBUG - TEST CASE
        @unlink("test");
        // Crea il file, e ci mette dentro "beta" (alfa non c'č).
        modifica("test", "alfa", "beta");
        modifica("test", "alfa", "gamma");      // beta, gamma
        // elimino beta.
        modifica("test", "beta");               // gamma
        modifica("test", "gamma", "delta");     // delta
        modifica("test", "", "eta");            // delta, eta
        modifica("test", "", "theta");          // delta, eta, theta
        modifica("test", "eta", "iota");        // delta, theta, iota
        @unlink("test");
?></PRE>
Leonardo
-- 
Nior thainig ar major i dtus an lae chugainn,
is ni rabhamar fein ann i gcoir na gceart
ach mar sheolfai aoireacht bo gan aoire,
ar thaobh na greine de Sliabh na mBan.