Page 1 sur 1

Convertion d'un fichier dat en tableau à deux dimentions

Posté : 01 janv. 2015, 18:02
par DroZo
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 !

Re: Convertion d'un fichier dat en tableau à deux dimentions

Posté : 01 janv. 2015, 18:24
par tof73
$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é.

Re: Convertion d'un fichier dat en tableau à deux dimentions

Posté : 01 janv. 2015, 19:18
par tesmet
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>";
    }
    
?>

Re: Convertion d'un fichier dat en tableau à deux dimentions

Posté : 01 janv. 2015, 22:46
par sirakawa
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);
?>

Re: Convertion d'un fichier dat en tableau à deux dimentions

Posté : 01 janv. 2015, 23:21
par DroZo
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 !