[RESOLU] Convertion d'un fichier dat en tableau à deux dimentions

Petit nouveau ! | 6 Messages

01 janv. 2015, 18:02

Bonjour et bonne année à tous,
Je dois convertir le fichier . dat ci-dessous en tableau à deux dimensions afin de pouvoir l'exploiter dans la suite de mon travail:

Code : Tout sélectionner

UNDIRECTED GRAPH NB_NODES 4 NB_EDGES 10 LIST_OF_EDGES COSTS 1 0 5 2 0 4 2 1 67 3 0 26 3 1 75 3 2 38 4 0 43 4 1 43 4 2 48 4 3 6 END
J'ai donc rédigé le code ci-dessous. Le problème est que j'ai réussit à entrer chaque ligne de mon fichier dat dans un tableau (à une dimension, donc) mais que je n'arrive pas à faire entrer le contenu de ces lignes dans un autre tableau. En clair, au lieu d'avoir un tableau à deux dimensions, je me retrouve avec un tableau à une dimension.
<?php
$fichier="inst_v4.dat";
$tableau1 = array( ); // première dimension de mon tableau. Ce tableau est censé accueillir chaque lignes de mon fichier (et donc d'accueillir $tableau2)
$tableau2 = array( ); // seconde dimension de mon tableau. Ce tableau est censé accueillir chaque composants d'une ligne de mon fichier.
if(file_exists($fichier)) {
    print "Le fichier $fichier existe. <br>";
    if($pointeur=fopen($fichier,'r')){
        print "Fichier ouvert correctement <br>";
        $i = 0;
        while(!feof($pointeur)){
            $ligne=fgets($pointeur,512);
            if (preg_match('/^[0-9]/',$ligne));
                {
                    $lignemodif1=explode('\t',$ligne);
                    foreach($lignemodif1 as $cellule)
                    {
                        $tableau1[$i] = $cellule ;
                        $i++ ;
					}
              }
		}
        fclose($pointeur);
        if ($tableau1){
            print_r($tableau1);
        }
    }
    else{
        print "Le fichier n'a pas pu s'ouvrir. <br>";
        }
    }
else{
    print "Le fichier $fichier n'existe pas. <br>";
    }
    
  
?>
Quelqu'un pourrait-il m'aider? Merci beaucoup !

Mammouth du PHP | 688 Messages

01 janv. 2015, 18:24

$i = 0;
while(!feof($pointeur)){
  $lignemodif1=explode('\t',$ligne);
  $j = 0;
  foreach($lignemodif1 as $cellule){
    $tableau1[$i][$j] = $cellule ;
    $j++ ;
  }
  $i++;
}
à compléter par ce que j'ai enlevé.

Eléphant du PHP | 63 Messages

01 janv. 2015, 19:18

Bonne année
            if (preg_match('/^[0-9]/',$ligne));
Le point virgule à la fin du "if" termine ce même "if"... si tu veux cette condition alors tu dois enlever ce ; de trop.
                    $lignemodif1=explode('\t',$ligne);
Les caractères spéciaux comme \t ne sont pas interprétés entre simple quote. Tu peux comparer entre var_dump('\t'); et var_dump("\t"); pour voir la différence.

$ligne contiendra un retour à la ligne que tu peux enlever avec rtrim() ou trim().

explode retourne déjà un array(), inutile de parcourir avec un foreach pour créer un tableau. Pour créer ce tableau dans un tableau, la syntaxe $tableau[] = explode(); suffit.
<?php

$fichier="inst_v4.dat";
$tableau = array(); 
if(file_exists($fichier)) {
    print "Le fichier $fichier existe. <br>";
    if($pointeur=fopen($fichier,'r')) {
        print "Fichier ouvert correctement <br>";
        $i = 0;
        while(!feof($pointeur)){
            $ligne=fgets($pointeur,512);
            if (preg_match('/^[0-9]/',$ligne)) {
                $tableau[] = explode("\t", rtrim($ligne));
            }
		}
        fclose($pointeur);
        if ($tableau){
            print_r($tableau);
        }
    }
    else{
        print "Le fichier n'a pas pu s'ouvrir. <br>";
        }
    }
else{
    print "Le fichier $fichier n'existe pas. <br>";
    }
    
?>

Mammouth du PHP | 2278 Messages

01 janv. 2015, 22:46

Une autre approche supposant des tabulations entre les données
<?PHP
$tab_res = array();
$file = fopen ("data.dat", "r");
var_dump($file);
//si tu es sûr du nobre de lignes inutiles au début
$i =1;
while (feof($file) != True)
{
	$ligne = fgets ($file);
	if ($i >4)
	{
		print "<br>$ligne";
		$elems = explode ("\t", $ligne);

		print "<br>";


		$contestable = $elems[0];
		$l = strlen($contestable);
		$reduit = substr($contestable, 0,3);
		print "$contestable $l :::$reduit:::<br>";
		if ($reduit != "END")
		{
			$tab_res[] = $elems;
		}
	}
	$i++;
}
//$inutile = array_pop($tab_res);
print_r($tab_res);
fclose ($file);
?>
Much more simple:
<?PHP
$tab_res = array(); //caractère tabulation
$file = fopen ("data.dat", "r");
var_dump($file); //étape de ma réflexion
//si tu es sûr du nobre de lignes inutiles au début
$i =1;
$tab = chr (9);
while (feof($file) != True)
{
	$ligne = fgetcsv ($file,0, $tab);
	if ($i >4)
	{
		$tab_res [] = $ligne;
	}
	$i++;
}
print_r($tab_res);// résultat excédentaire
array_pop($tab_res); // dépilage du dernier élément;le tableau est raccourci
print_r($tab_res);//étape de ma réflexion
array_pop($tab_res);// dépilage du dernier élément;le tableau est raccourci
print_r($tab_res);//étape de ma réflexion
fclose ($file);
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 6 Messages

01 janv. 2015, 23:21

Alors là merci ! Merci infiniment ! Ca marche super ! Ca faisait plusieurs jours que je cherchais et je désespérais de finir ce bout de code. Vraiment merci ! Vous êtes tous vraiment super !