8791 sujets

Développement web côté serveur, CMS

Bonjour a tous,

Voila j’essaye de récupérer des info dans un fichier texte et de les mettre dans un tableau pour plus tard les exporter vers sql...

le code est celui si :

<?php
$ouvre=fopen("terrain.txt","r");  
while (!feof ($ouvre))          
    {
 
$lecture = fgets($ouvre, 8192);
$donnee=explode("],",$lecture);  // parsing des données basé sur "],")
 
$combien=count($donnee)-1; // nbre d'éléments séparés par "],"
echo "<b>Il y a ",$combien," terrain : </b><br><br>";
 
for ($i=0;$i<$combien;$i++)
    {
$donnee[$i]=str_replace('['," ",$donnee[$i]);
$donnee[$i]=str_replace('"'," ",$donnee[$i]);
$donnee[$i]=str_replace(':',",",$donnee[$i]);
$donnee[$i]=str_replace(','," ",$donnee[$i]);
 
 
  $arResult = array(); 
  $arBuffer = array(); 
 
 
  $strData = $donnee[$i] or
             die("fichier non trouv&eacute;");
 
echo $strData;  
    $strBuffer = explode(" "," ");
     
    $nVal1 = $strBuffer[0]; 
    $nVal2 = $strBuffer[1];
    $ncoordone = substr($nVal2, 0, 1); 
    $strBuffer2 = explode(" "," ");
    $nVal3 = $strBuffer2[0];
    $id_joueur = substr($nVal3, 0);
    $strBuffer3 = explode(" "," ");
    $nVal4 = $strBuffer3[0];
    $nVal5 = $strBuffer3[1];
    $ntype = substr($nVal4, 0, 1);
     
 
 
    $arResult["coordonée"] = $ncoordone;
    $arResult["id_joueur"] = $id_joueur;
    $arResult["type"] = $ntype;
 
 
     
      echo  "<br>
       <pre>
       coordonnée .. : $ncoordone
       id_joueur ......... : $id_joueur
       type ....... : $ntype
       </pre>\n";
    }
 
  }
   
fclose($ouvre);     
?>


à la base ma donnée ressemble a ceci : "541,16":[709056,"Outpost 1",11,10],"541,19":[657010,"celestia",7,2],
après petit traitement : 541 19 709056 Outpost 1 11 10 ( je les recupere 1 à 1 avec explode etc etc )
et au final elle doit s'afficher comme ceci :
coordonnée .. : 541,19
id_joueur ......... : 709056
type ....... : Outpost 1

Mais ça marche pas T_T ( oui si je pose le sujet ces normal ^^ )

Voila si quelqu'un vois d'où ça viens ...

N.B: on m'a proposer une expression reguliere : à la base ma donnée ressemble a ceci :
preg_match( '/^"(\d+,\d+)":\[(\d+),"([^"]+)",([\d\.]+),([\d\.]+)\]$/', $sFromDB, $aMatches );
Mais le truc ces que je ces pas comment on l'utilise xD

Donc en gros je suis dans la mouise help plz =)
Excuses moi de poser la question, mais pourquoi la structure des données de ton fichier texte est aussi complexe ? le fichier ne dépend pas de toi ?

Une structure comme ca te posera moins de soucis :
541,16:709056:Outpost 1:11:10|541,19:657010:celestia:7:2

Extraction simple des blocs par "|" et ensuite on explode par ":"
Modifié par Apoooo (02 Apr 2012 - 20:29)
salut...

ce qui est fou c'est que les données que tu reçois ressemblent vachement, mais alors vachement à du Json...

essayes donc de faire un json_decode sur la réception et voit ce que tu peux en faire
Modérateur
Salut, oui en effet en json ça marche, presque. Il manque les accolades dans le code que tu cites:


  $data = '"541,16":[709056,"Outpost 1",11,10],"541,19":[657010,"celestia",7,2]';
  $parsed_data = json_decode('{'.$data.'}',TRUE);
  print_r($parsed_data);


Sinon pour ton code tu avais des choses très étranges par là:


  $strBuffer = explode(" "," ");
  $nVal1 = $strBuffer[0]; 
  $nVal2 = $strBuffer[1];


ce qui équivaut à


  $nVal1 = $nVal2 = NULL;
Oui j'ai trouver mon erreur j'avais juste mal compris l'utilisation de explode lol
Voila au final ce que ca donne :

<?php
$ouvre=fopen("terrain.txt","r");
while (!feof ($ouvre))
	{

$lecture = fgets($ouvre, 8192); 
$donnee=explode("],",$lecture); 

$combien=count($donnee)-1; 
echo "<b>Il y a ",$combien," terrain : </b><br><br>";

for ($i=0;$i<$combien;$i++)
	{
$donnee[$i]=str_replace('[',"",$donnee[$i]);
$donnee[$i]=str_replace('"',"",$donnee[$i]);
$donnee[$i]=str_replace(':',",",$donnee[$i]);

echo  $donnee[$i],'<br>';
 $decoupage = explode (",","$donnee[$i]");

$coordonnee = "$decoupage[0],$decoupage[1]";
$id_joueur = "$decoupage[2]";
$nom = "$decoupage[3]";
$level = "$decoupage[5]";
    
	
      echo  "<br>
       <pre>
		coordonnée .. : $coordonnee
		id_joueur ......... : $id_joueur
		nom ....... : $nom
		level ..... : $level
       </pre>\n";
$racine = $_SERVER["DOCUMENT_ROOT"];
$conf = $racine ."config/conf.php";
	require $conf;
			$sql="INSERT INTO terrain (coordonnee,id_joueur,nom,level) VALUES ('$coordonnee','$id_joueur','$nom','$level')";
    }

  }
  
fclose($ouvre);
?>


Oui c'est bien du json mais je récupéré les donner de celui ci via un logiciel c'est pour ça que je n'ais pas le contrôle sur mon fichier txt vu que je ne sais pas comment récupérer directement les donner de ce json... sauf si quelqu'un a une solution