enlever une sous chaîne ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : enlever une sous chaîne ?

par Ryle » 23 août 2006, 12:54

je vois pas trop à quoi sert le strrchr dans ton code.. et pour un fichier nommé "01.teswdfbte.html" ton code ne fonctionne plus.

Personnellement je suis plus partisant de ce genre d'écriture :
$chaine = substr( $nom , 0 , strrpos($nom, '.') );
Tu recherches la position du dernier point et tu tronque la chaine

par artotal » 23 août 2006, 12:43

<?php $nom=basename($img);
$elagage=strrchr($nom, '.');
$seg = explode(".", $nom);
echo $seg[0]; 

par aelurus » 23 août 2006, 08:05

Ra c'est encore moins drole ce que tu dit car cela veux dire que tu n'as pas tester ce ti bout de script car $f3 peux avoir n'importe qu'elle longueur :'( et si tu as des carractere speciaux dans les noms un htmlentities et hop le tour est jouer :'(...
Si tu as une autre methode je veux bien la voir s'il te plait.

par artotal » 22 août 2006, 17:10

Même si tu as mis le doigt dessus, je ne connais pas la longeur de la chaîne à l'avance.

par aelurus » 22 août 2006, 17:07

Meme que j'avais raison ^^
<?php
$f3="01.teswdfbte.html";
          $b= strlen($f3) - strpos ($f3,'.');
          $nom= substr($f3,0,-$b);
          $nom1= substr($f3,0,-5);
           $nom2=substr($nom1,3,$b);
	echo"<li>".$f3."</li>";
	echo"<li>".$nom."</li>";
	echo"<li>".$nom1."</li>";
	echo"<li>".$nom2."</li>";
?>
affiche :

Code : Tout sélectionner

# 01.teswdfbte.html # 01 # 01.teswdfbte # teswdfbte

par artotal » 22 août 2006, 16:44

Le script complet pour une image aléatoire par chargement à partir d'un dossier avec le nom du fichier sans l'extension
<?php
 function image_aleatoire($repertoire) {
//la variable $repertoire est le chemin d'un répertoire du type $repertoire="./chemin/dossier/"

// Extensions de fichiers à lister, séparer par "|"
$filetype="jpg|jpe|jpeg|gif|png";
//Ouverture puis listing du dossier
$repertoire_ouvert=opendir($repertoire);
while ($filesrc=readdir($repertoire_ouvert))
if (eregi("\.($filetype)$",$filesrc)) $filelist[]=$filesrc;
closedir($repertoire_ouvert);
//Concaténation du chemin du répertoire et de l'image choisie
$filealeatoire=$repertoire.$filelist[floor(rand(0,count($filelist)-1))];
//le résultat de la fonction est le chemin
return $filealeatoire ;
}
	$repertoire="./voiture_img/";
	$img=image_aleatoire($repertoire);
// sépare le nom du du fichier de sont extension
$nom=basename($img);
$elagage=strrchr($nom, '.');
$seg = explode(".", $nom);
//echo $seg[0];
echo $seg[0].'<br /><img src='.$img.' />';
	
/*	
$requete="SELECT url_photo FROM voiture WHERE '".$img."'";
//echo $requete;
$resultat=mysql_query($requete, $lien) or die (mysql_error());
$affiche_tout=mysql_fetch_assoc($resultat);
	$url_photo=$affiche_tout['url_photo'];
	echo "<br /><img src=".$url_photo." /><br />";*/
// prochainement sortir de la base de donnée
?>

par Ryle » 22 août 2006, 16:42

Tu peux effectivement faire
- un explode() ou split() sur le point pour obtenir un tableau avec chaque chaine (attention toutefois aux noms de fichiers qui pourraient contenir un point)
- un strpos() et un substr() pour déterminer la position du point et couper ta chaine de 0 jusqu'à cette position
- utiliser les expressions régulière et faire un masque qui va jusqu'au point,
- ...

par artotal » 22 août 2006, 16:39

j'ai trouvé avec explode :
on peux voir le résultat ici :
http://creatif-web.be/anaska/projet/img_aleatoire.php
$nom=basename($img);
$elagage=strrchr($nom, '.');
$seg = explode(".", $nom);
echo $seg[0];
Merci pour vos conseil.

par artotal » 22 août 2006, 16:30

cette fonction compte de gauche à droite, les noms reçus sont de taille variable d'ou mon besoin d'élager que l'extention du fichier.
J'ai réussi à isoler l'extension, maintenant je voudrai donc élager la chaîne initiale en soustraiyant l'extension ?

par graphistnet » 22 août 2006, 16:28

La fonction split() te permet de découper une chaine en fonction d'une expression rationnelle, explode() découpe une chaîne en segments en fonction d'un séparateur (plus rapide que split()). Je pense que ca pourrait t'aider :wink:

par aelurus » 22 août 2006, 16:17

:'(
<?php
echo substr('abcdef', 1);    // bcdef
echo substr('abcdef', 1, 3);  // bcd
echo substr('abcdef', 0, 4);  // abcd
echo substr('abcdef', 0, 8);  // abcdef
echo substr('abcdef', -1, 1); // f

// Accéder à un simple caractère dans une chaîne
// peut également être réalisé en utilisant des accolades
$string = 'abcdef';
echo $string{0};                // a
echo $string{3};                // d
echo $string{strlen($string)-1}; // f

?> 
c'est avec cette fonction que sa ce fait ton histoire sisi je te dit ^^

par artotal » 22 août 2006, 16:12

elle retourne le résultat de droite à gauche, donc l'extension, je cherhce le nom sans l'extension...
D'ou une soustraction sur la chaine entière possible qu'en forcant le typage, non ?

par aelurus » 22 août 2006, 16:08

Regarde substr()

enlever une sous chaîne ?

par artotal » 22 août 2006, 15:59

Bonjour,
je cherche à enlever une sous chaîne, plus exactement, le nom d'image :
$img='totototot.gif'; // résultat venant d'une base, donc aléatoire...
$nom=basename($img);
$elagage=strrchr($nom, '.');
echo $elagage;
Sa me donne l'extension du fichier et en faite je butte pour n'avoir le fichier sans l'extension.
Si je fait une comparaison avec un opérateur mathématique sa me renvoie un chiffre donc il faudrai forcé le typage en string, mais je ne me rapelle plus comment faire ?
Merci