IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Mise en tableau complète d'un fichier TXT avec cesures


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut Mise en tableau complète d'un fichier TXT avec cesures
    Salutations,

    J'ai beau bidouillé depuis des années en PHP, en fait, je ne suis pas doué.

    Ce qui pêche en fait, c'est surtout les formules complexes. (ou non !).

    Pour alléger le code global d'un site que je gère, je cherche à mettre en tableau, colonne par colonne et ligne par ligne les données d'un fichier .TXT.
    Gérer le fichier et mettre soit les lignes, soit les colonnes en variables, j'y arrive plus ou moins, mais en fait, les 2 : Pas du tout.

    Du coups, je me rends compte que mon compte doit être entièrement repensé, et pourtant, je galère depuis quelques heures dessus.

    Chaque ligne du TXT comprend trois "|" qui sépare les infos importantes par colonnes.
    Il y a actuellement "1 lignes à ce fichier TXT.

    Je cherche à pouvoir sortir facilement, par variables, une infos précise et afficher l'ensemble proprement dans différentes tables HTML (selon la variable de la première colonne).
    En gros, cette liste recense certains liens WWW, que je classe en fonction de la première colonne, et qui doivent s'afficher dans des tableaux CSS/HTML indépendants.

    Voila à quoi ressemble mon code pourri actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?php
    // Ouverture du fichier TXT en lecture seule.
    $fichier = utf8_encode("liens.txt");
    $open = fopen($fichier, 'r');
    // Si le fichier est introuvable...
    if(!$open)
    {
        echo "L'ouverture du fichier $fichier n'a pas réussi.\n";
        exit;
    }
     
    $fileLines = file($fichier);
    $i =1;
    // Boucle
    while (!feof ($open))
    {
        $line=fgets($open);
     
        //process line however you like
        $line=trim($line);
     
        //add to array
        $lines[]=$line;
     
    	$array = explode("|", $line);
    	if(count($array)!=3)
    	{
    		echo "Ligne $i invalide.\n";
    		continue;
    	}
    	// Debugg
    	$result = array_unique($array);
    	print_r($result);
    	echo "<br />";
    	$i=$i+1;
     
    }
    // Fermeture du fichier TXT
    fclose($open);
     
    // Debug
    echo "<br /><br />";
    echo $lines[4] . "<br />";
    echo $array[3] . "<br />";
    echo count($fileLines);
    ?>
    Qu'en pensez-vous ?
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut faire simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $file = file('liens.txt');
    foreach ($file as $line) {
       $data[] = str_getcsv($line, '|');
    }
     
    echo "<br />Première ligne, 3ème colonne<br />" . $data[0][2];
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Terrible... Tout simplement.
    Je ne connaissais pas str_getcsv. Je potasse sa doc. Merci.

    Par contre, du coup, je vois bien que l'ensemble de mon TXT est rangé dans un tableau, et que je peux sortir l'info que je veux une à une.

    Mais pour sortir dans une sorte de While L'ENSEMBLE des données et les ranger dans une Table HTML ?
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    str_getcsv c'est un peu comme explode.
    Pour le tableau HTML, c'est la même chose à l'envers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    echo '<table>';
    foreach ($data as $line) {
        echo '<tr><td>' . implode('</td><td>', $line) . '</td></tr>';
    }
    echo '</table>';
    ?>
    Mais on peut le faire directement pendant la lecture du fichier, ça évite de mettre le fichier en mémoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $file = file('liens.txt');
     
    echo '<table>';
    foreach ($file as $line) {
       $data = str_getcsv($line, '|');
       echo '<tr><td>' . implode('</td><td>', $line) . '</td></tr>';
    }
    echo '</table>';
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Oki, je comprends le topo.

    Par contre, j'ai eu une erreur dans le deuxième code donné.
    En effet, après essais, j'ai changé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<tr><td>' . implode('</td><td>', $line) . '</td></tr>';
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<tr><td>' . implode('</td><td>', $data) . '</td></tr>';
    Car sinon, cela n'affichait rien, juste la table HTML vide.

    Je sais, j'abuse, mais j'essaye du coup depuis tout à l'heure, mais ça doit être un manque de connaissance de formules...
    Si je veux maintenant juste classer en amont le tableau (array, pas HTML), par ordre alphabétique, par la première colonne ($data[2]) ?
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Oui c'est bien $data pour le deuxième code

    Si tu veux trier, il faut utiliser le premier code et utiliser array_multisort() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach ($data as $key => $row) {
        $tri[$key]  = $row[2];
    }
    array_multisort($tri, SORT_ASC, $data);
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Bon ça, merci maintenant je commence à comprendre.

    Par contre, pour trier en plus d'alphabétiquement la liste pour créer une table pour chaque catégorie row[0] (pas sur que row[0] soit la bonne variable pour cela)?
    Je suis un peu perdu dans les boucles complexes intégrant des conditionnelles.

    L'idée serait de faire par exemple une table classée alphabétiquement avec uniquement les lignes dont la première colonne est "toto", une autre table classé alphabétiquement avec les lignes dont la premiere colonne est "titi", etc...
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  8. #8
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Toutes mes nouvelles tentatives se sont soldées par des échecs.

    Encore une fois, je pense surtout que mon raisonnement va au plus compliqué.
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Range tes données dans un tableau indexé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $file = file('liens.txt');
     
    foreach ($file as $line) {
       $values = str_getcsv($line, '|');
       $data[$values[0]] = $values;
    }
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/09/2018, 22h38
  2. Exportation d'une base sql server 2005 complète ds un fichier txt
    Par papillange dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 13/08/2007, 15h39
  3. Réponses: 41
    Dernier message: 02/05/2006, 14h17
  4. Creer un fichier txt avec la date du jour
    Par quarkz dans le forum Débuter
    Réponses: 8
    Dernier message: 28/07/2005, 17h29
  5. Pb import fichier txt avec lignes de longueurs diverses
    Par zebulon90 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/12/2004, 08h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo