aide à la construction d'une chaine de caractere

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 : aide à la construction d'une chaine de caractere

Re: aide à la construction d'une chaine de caractere

par sirakawa » 24 juil. 2012, 21:47

Il faut exploiter les variables zone_ancienne et zone_nouvelle et numero_ancien et numero_nouveau

Re: aide à la construction d'une chaine de caractere

par owenho » 24 juil. 2012, 20:12

d'accord merci bien , un bon test,
maintenant comment faire pour contruire les chaines de la façon suivant:

Code : Tout sélectionner

chaine1= ((23928392,2091039,59091212,6766566,23928392,2091039),(45450909,6766566,23928392,2091039,45450909,6766566))

Code : Tout sélectionner

chaine2 = ((23928392 2091039,59091212 6766566,23928392 2091039),(45450909 6766566,23928392 2091039,45450909 6766566))

Re: aide à la construction d'une chaine de caractere

par sirakawa » 24 juil. 2012, 18:57

if (count($ligne) == 4) sert à vérifier que la ligne a bien quatre éléments, ni plus ni moins, ce qui risque d'avoir de l'intérêt pour extraire correctement les données.
au lieu d'un simple test de longueur de la chaine qui autorise des données incorrectes (cf commentaires).

Re: aide à la construction d'une chaine de caractere

par owenho » 24 juil. 2012, 16:31

Bonjour , merci de vos réponses,
sarakawa, j'ai pas compris pourquoi tu as mis ce test et à quoi sert le nombre 4 :

Code : Tout sélectionner

if (count($ligne) == 4)
ajoute à votre connaissance que un groupe de 'N' peut avoir minium 3 lignes .
maintenant les chaines comment les faire contruire.

Re: aide à la construction d'une chaine de caractere

par sirakawa » 24 juil. 2012, 09:34

D'abord quelques remarques, ensuite une idée
<?PHP
$fichier = file('fichier.txt', FILE_IGNORE_NEW_LINES);
$data = array();
$nb_lignes = count($fichier);
for($i = 0; $i < $nb_lignes; $i++)  // il est inutile de répéter l'appel  à count.
{
    $ligne = explode(',', rtrim($fichier [$i]));
	/* une fois qu'on a explosé une ligne qui pourrait être vide, on teste sa longueur pour savoir si on va traiter 
	le contenu du tableau résultant!!! Mais ce test de longueur n'est pas suffisant car la ligne
	N=1 est de longueur supérieure à 0 et est donc traitée en générant une erreur. De plus != 0 inclut les valeurs 
	négatives. Pour avoir un traitement correct il faut compter le nombre d'éléments du tableau résultant*/
	 //if(strlen(rtrim($fichier[$i])) != 0) 
	 if (count($ligne) == 4)
	 {
    	$n = explode('=', $ligne[0]);
    	$n = $n[1];
 
	    $data[$n][] = $fichier[$i];//on se demande à quoi sert ce tableau;
 
    	$x = explode('=', $ligne[1]);
    	$x = $x[1];
 
 
    	$y = explode('=', $ligne[2]);
    	$y = $y[1];
 
    	$z = explode('=', $ligne[3]);
    	$z = $z[1];
   
    	echo 'N='.$n.',x='.$x.',y='.$y.',zone='.$z.'<br>';
	}

}
//  proposition à développer
$valeurs_finales = array();
foreach ($fichier as $ligne) // le tableau étant dans un fichier, comme on doit le parcourir en entier dans l'ordre
{
	$elements = explode (",", $ligne);
	$zone_nouvelle = 0;
	$n_nouveau = 0;
	if (count($elements) == 4)
	{
		$zone_ancienne = $zone_nouvelle;
		$n_ancien = 0;
		$zone_nouvelle = $elements[3];
		$n_nouveau = $elements[0];
		/*zone_ancienne et zone_nouvelle permettent de savoir quand on change de zone. idem pour n_ancien et n_nouveau.
                 On peut se fichier au changement de valeur de N pour savoir comment affecter les valeurs*/ 
			print "$n_nouveau $zone_nouvelle <br>";
	}
}

?>

Re: aide à la construction d'une chaine de caractere

par xTG » 23 juil. 2012, 20:57

Stockes tes valeurs dans un array en prenant la zone comme index. ;)
Après plus qu'à boucler sur cet array et construire tes chaînes.

aide à la construction d'une chaine de caractere

par owenho » 23 juil. 2012, 20:23

Bonjour à tous,
bon j'ai un fichier texte, qui contient les données comme suit:

Code : Tout sélectionner

N=0,x=23928392,y=2091039,zone=1 N=0,x=59091212,y=6766566,zone=1 N=0,x=23928392,y=2091039,zone=1 N=1,x=45450909,y=6766566,zone=1 N=1,x=23928392,y=2091039,zone=1 N=1,x=45450909,y=6766566,zone=1 N=2,x=23928392,y=2091039,zone=2 N=2,x=23928192,y=6766566,zone=2 N=2,x=23928392,y=2091039,zone=2 N=3,x=23928392,y=2091039,zone=2 N=3,x=23928192,y=6766566,zone=2 N=3,x=23928392,y=2091039,zone=2
aprés que je crée les variable pour stocker ce contenu comme ça:

Code : Tout sélectionner

$lines = file('C:\file.txt', FILE_IGNORE_NEW_LINES); $data = array(); for($i = 0, $c = count($lines); $i < $c; $i++) { $line = explode(',', rtrim($lines[$i])); if(strlen(rtrim($lines[$i])) != 0) { $n = explode('=', $line[0]); $n = $n[1]; $data[$n][] = $lines[$i]; $x = explode('=', $line[1]); $x = $x[1]; $y = explode('=', $line[2]); $y = $y[1]; $z = explode('=', $line[3]); $z = $z[1]; echo 'N='.$n.',x='.$x.',y='.$y.',zone='.$z.'<br>'; }

le contenu s'affiche comme suit:

Code : Tout sélectionner

N=0,x=23928392,y=2091039,zone=1 N=0,x=59091212,y=6766566,zone=1 N=0,x=23928392,y=2091039,zone=1 N=1,x=45450909,y=6766566,zone=1 N=1,x=23928392,y=2091039,zone=1 N=1,x=45450909,y=6766566,zone=1 N=2,x=23928392,y=2091039,zone=2 N=2,x=23928192,y=6766566,zone=2 N=2,x=23928392,y=2091039,zone=2 N=3,x=23928392,y=2091039,zone=2 N=3,x=23928192,y=6766566,zone=2 N=3,x=23928392,y=2091039,zone=2
ok, maintenant je voudrais créer deux chaines(chaine1 pour zone1 et chaine2 pour zone2) qui ont la forme suivant:
((x y,x y,x y),(x y,x y)), bon pour mon cas:

Code : Tout sélectionner

chaine1=((23928392 2091039,59091212 6766566,23928392 2091039), // pour N=0 (45450909 6766566,23928392 2091039,45450909 6766566)) //pour N=1 chaine2=((23928392 2091039,23928192 6766566,23928392 2091039), // pour N=2 (23928392 2091039,23928192 6766566,23928392 2091039)) // pour N=3
chaine1 contient les lignes qui appartient au zone1.et pour chaque N représente un (x y,x y,x y.. )