Comparer deux chaines de caractères

Fermé
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 - 30 avril 2013 à 14:18
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 - 30 avril 2013 à 16:31
Bonjour tout le monde,

J'ai un problème très simple ! ^^

Je souhaite comparé une variable qui contient une chaine de caractère (ex: $ext = txt) avec une autre chaine de caractère (ex: 'txt').

J'ai fait ceci:
foreach($nomFichier as $value)
						{
							$chain = $value;
							echo "Fichier: $value <br/>";
							$extension = explode(".",$chain);
							$ext=$extension[1];
							echo "ext: dat==$ext <br/>";
							if($ext == 'dat')
							{
								echo "extension ok";								
								$fichierDat_valide[$nb] = 1;
							}
							else
							{
                                                                echo "erreur extension";
								$fichierDat_valide[$nb] = 2;
							}	
						}


Mais voilà, sa ne fonctionne pas, même quand l'extension n'est pas correct, on m'affiche "extension ok". Du coup, le problème doit venir de mon if mais je sait pas comment faire !

Quelqu'un peut m'aider ! =)
Merci d'avance.
A voir également:

4 réponses

Utilisateur anonyme
30 avril 2013 à 14:43
Salut salut,

Si ton code fonctionne normalement.. Enfin je pense! Tu as quelques exemples des noms de fichiers qu'il y a dans ton tableau?

Après il peut y avoir quelques petites choses à en dire, fais attention un fichier peut contenir plusieurs points dans son nom (ex : Personnage.class.php), Vu que tu sépares le nom de fichier par rapport aux points et que tu considères l'extension comme le 2e élément du tableau cela peut entrainer un comportement non voulu.
Tu peux faire $ext=count($extension)-1 pour être sûr d'avoir le dernier paramètre.

Tu peux aussi regarde du côté des expressions régulières pour ce que tu veux faire ;)
0
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 1
Modifié par nonodu003 le 30/04/2013 à 15:58
ok merci. J'ai récupéré les extensions avec un substr du coup.

Et j'ai fini par trouver une fonction afin de comparer mes deux chaines ,qui est strcmp().

Mais j'ai un nouveau problème. Afin de voir si les fichiers sont valides selon leur extension j'ai fait ceci:
for($nb = 0; $nb < $nbFileDat; $nb++)   
     {  
       
      //Vérification extension dat   
      foreach($nomFichierDat as $value)  
      {  
       $chain = $value;  
       $extension = substr($chain, -3);  
       $compareDat = strcmp($extension,'dat');  
       if( $compareDat == 0)  
       {  
        echo "Extension dat OK ******* <br/>";         
        $fichierDat_valide[$nb] = 1;  
        echo "$fichierDat_valide[$nb] <br/>";  
       }  
       else  
       {  
        echo "Extension dat KO ++++++++ <br/>";  
        $fichierDat_valide[$nb] = 2;  
        echo "$fichierDat_valide[$nb] <br/>";  
       }   
      }  
        
      //Vérification extension txt   
      foreach($nomFichierTxt as $value)  
      {  
       $chain = $value;  
       $extension = substr($chain, -3);  
       $compareTxt = strcmp($extension,'txt');  
       if( $compareTxt == 0)  
       {  
        echo "Extension txt OK *********** <br/>";  
        $fichierTxt_valide[$nb] = 1;  
        echo "$fichierTxt_valide[$nb] <br/>";  
       }  
       else  
       {  
        echo "Extension txt KO ++++++++++ <br/>";  
        $fichierTxt_valide[$nb] = 2;  
        echo "$fichierTxt_valide[$nb] <br/>";  
       }   
      }  
     }  
    else {  
     echo "<br/><p><strong>ERROR</strong> files<br/>";  
    }  
   //Test de validation des fichiers  
    foreach ($fichierDat_valide as $valueDat)   
    {  
     echo "Valide Dat: $valueDat <br/>";  
     if($value != 1)  
     {  
      $Dat_valide = 2;  
     }  
    }  
    foreach ($fichierTxt_valide as $valueTxt)   
    {  
     echo "Valide Txt: $valueTxt <br/>";  
     if($value != 1)  
     {  
      $Txt_valide = 2;  
     }  
    }   


Mais voilà, je trouve pas les même valeurs avec les echo de $fichierTxt_valide ( de même pour dat) et les foreach lorsque je parcours mes nouveaux tableau.

Je sais pas si je suis compréhensible ?!

Par exemple, je teste 3 fichiers pour chaque extension
pour dat:
-avec echo on m'affiche: 1 2 1
-avec foreach: 1 1 1
pour txt:
-avec echo: 1 1 2
avec foreach: 2 2 2
Les echo sont juste par rapport à mon test. Du coup, je me doute que le problème vient de comment j'insère les valeurs à mes tableaux car on a l'impression que les foreach affiche la dernière valeur du fichier test (dans les deux cas).

Mais je ne vois pas d'ou peut provenir le problème... --"
0
Il doit y avoir un comportement qui bug, le code commence à avoir une certaine taille pour ce que ça fait.

Tu cherche à compter le nombre de fichier avec telle ou telle extension c'est bien ça? Les types d'extensions sont définis à l'avance ou tu les récupères selon le tableau de nom de fichier?

Tu peux procéder plus simplement, ça évite de se perdre dans le code :

$nomFichier=array("test.txt","test.dat","test.pdf","test.txt","test.dat","test.pdf","test.dat","test.pdf"); 
$tab_ext=array(); 
foreach($nomFichier as $value) 
{ 
 $extension = explode(".",$value); 
 $extension=$extension[count($extension)-1]; 
  
 if(!key_exists($extension,$tab_ext)){ 
  $tab_ext[$extension]=1; 
 }else{ 
  $tab_ext[$extension]++; 
 } 
}


Ici le code récupère l'extension vérifie si il l'a connait -> dans le cas où elle n'est pas présente dans le tableau il l'insère en instanciant un entier à 1 ; dans le cas où il l'a connait il incrémente simplement la variable contenu. Et tu as à la fin un tableau avec les noms d'extensions et le nombre de fois où elles ont été trouvées.

N'hésite pas si je ne suis pas claire.

Résolu? ===> [RESOLU]
0
nonodu003 Messages postés 59 Date d'inscription jeudi 11 avril 2013 Statut Membre Dernière intervention 13 mai 2013 1
30 avril 2013 à 16:31
Ok !!!!
Merci beaucoup pour aide ^^
0