Extraction de chaine

Résolu/Fermé
TriTri80 - 29 sept. 2009 à 21:55
 Tritri80 - 14 oct. 2009 à 17:49
Bonjour,


Donc, je cherche une méthode pour extraire des éléments d'une chaîne.

Voici un exemple d'une partie de la chaine :

fleetList = [];

fleetList.push(

new Fleet(3418705,'test',7,0,3,450,0,675000,"0",0,'',
new Planet(36877,'Min-------Barret',2,"0","0","0"),
new Planet(0,'',0,"0","0","0"),
new Array(0,new Ship('Cargo X',3)),
new Array(0,new Resource(1,0),
new Resource(2,0),
new Resource(3,0),
new Resource(4,0),
new Resource(5,0)) ));

Les éléments en gras, italiques et soulignés sont ceux que je souhaite récupérer dans deux variables différentes (pour enregistrement dans BDD)

Ensuite, cet exemple peut être répété autant de fois que l'on veux, la structure est toujours la même.
Les éléments que je souhaite récupérer sont toujours de cette forme :

new Ship('Cargo X',3)

Voilà, si quelqu'un veux bien m'aider, merci :)

PS: Pas hésiter à poser des question pour plus de précisions.

3 réponses

Alors là je reste pantois. Je n'arrive pas à comprendre cette question, mais rassure toi ce n'est pas la première fois, et, heureusement, je ne connais pas tout ;-)
D'autre part, comme beaucoup trop souvent, on ne connait rien de l'environnement.
D'une manière générale, lorsque l'on pose un problème, il faut se mettre à la place de celui qui est susceptible de répondre et, par conséquent, lui donner les informations nécessaires - ne serait ce que pour l'inciter - à l'élaboration de la réponse; sinon on n'obtient rien.
Bonne soirée.
0
En fait, j'aimerais un script php permettant d'isoler certaine partie d'une chaine.
Un exemple de la chaine est donnée dans le premier post.

Le résultat finale serait sous cette forme :

$cargo_x est un tableau contenant toutes les valeurs associée : "new Ship('Cargo X',3)" -> ici c'est "3"

pour les autres nom, je trouverais par rapport à la base qui me sera donnée ici, si cela est possible.

Autres informations : la chaine est récupérée en POST, et seulement les information que je demande sont à récupérer.

Voilà, merci.

PS: Merci pour cette première réponse rapide :)
0
Re-Salut ,

Donc, après quelques heures en plus de codages ... J'ai enfin trouvé une solution :)

En voici le code, pour ceux qui chercheraient un script similaire dans le futur.

//Rajoutez ça au début du script php.
function instr($debut,$fin,$str,$trouve,$minus) {
if ($minus==1) {$str=strtolower($str);$trouve=strtolower($trouve);} //Si $minus=1, ne différencie pas les majuscules des minuscules
for ($l=$debut;$l<$fin;$l++) { //Faire une boucle du $debut jusqu'a la $fin
if (substr($str,$l,strlen($trouve))==$trouve) //Si $trouve est trouvé dans $str,
return $l+1; //Retourner a la fonction instr
end; //Quitter la fonction
}
return 0; //Sinon, retourner 0 pour dire que c'est pas trouvé
}

function ExtractChamp($chaine,$entier,$sep)
{
if($entier > 0)
{
$res=strtok($chaine,$sep); //découpe la chaine en segment avec le séparateur $sep.
if($res!="") //si la chaîne comporte au moins une fois le séparateur alors
{
for($i=1;$i<$entier;$i++)
{
$res=strtok($sep);//passe au segment suivant
}
}
}
else
{
$res=false;
}

return($res);//retourne le résultat
}


Voici deux fonctions pour chercher et extraire, ensuite, il suffit juste de boucler jusque la fin du texte.

//$chaine contient la chaine ou les infos sont à extraire.

$chaine2 = $chaine;
$chaine = stripslashes($chaine2);


//Cas de Cargo X
$cargo_x=0;
$chaine2 = $chaine;
do{
$nb = instr(0,strlen($chaine2),$chaine2,"Cargo X",0);
$chaine2 = substr($chaine2,$nb+8,strlen($chaine2));
$cargo_x+=ExtractChamp($chaine2,1,')');
}while($nb!=0);


//Cas de Cargo I
$cargo_i=0;
$chaine2 = $chaine;
do{
$nb = instr(0,strlen($chaine2),$chaine2,"Cargo I",0);
$chaine2 = substr($chaine2,$nb+8,strlen($chaine2));
$cargo_i+=ExtractChamp($chaine2,1,')');
}while($nb!=0);

Et voici donc deux exemple de boucle. Bien sur, on peut en faire autant que l'on veux à la suite.

Voili, voilou.

Merci pour ceux qui ont d'ores et déjà commencé à chercher pour moi.

A bientôt Peut-être.
0
Encore moi xD

Je reviens pour poster une version beaucoup plus légère, efficace et rapide ^^

voici le code :

$chaine = stripslashes($_POST['infos2']);

//Cas de Cargo X
$cargo_x=0;
preg_match_all("#Cargo X\',[0-9]+#s", $chaine, $tabl, PREG_SET_ORDER);
foreach($tabl as $t){
$tab=explode('\',', $t[0]);
$cargo_x+=$tab[1];
}

et donc $cargo_x contient la valeur voulue :)

Voili, voilou :)
0