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 :

Récupérer le contenu de la colonne #host_rev du Fichier CSV et les formater en .TXT


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut Récupérer le contenu de la colonne #host_rev du Fichier CSV et les formater en .TXT
    Bonjour.

    Le contenu de mon Fichier CSV est disposé de façon suivante:

    "#harmonicc_pos	#harmonicc_val	#pr_pos	#pr_val	#host_rev	#n_hosts"
    "1	2.9977668E7	1	0.020841439972937113	com.googleapis	2207"
    "2	2.7867704E7	3	0.011812342801027227	com.facebook	5745"
    "3	2.741998E7	2	0.012857445865476182	com.google	2950"
    "4	2.519603E7	4	0.007273020531312286	com.twitter	1050"
    "5	2.4558836E7	5	0.0064389191631340215	org.w	73"
    "6	2.4533702E7	6	0.005983623364635486	com.youtube	2354"
    "7	2.2592098E7	9	0.003798771953622204	com.instagram	659"
    "8	2.206065E7	7	0.004856869480498758	org.gmpg	2"
    "9	2.1829028E7	13	0.0028634510908277706	com.linkedin	657"
    "10	2.1595446E7	8	0.004481096004418113	com.googletagmanager	26"
    "11	2.093092E7	22	0.001704104008072028	com.gravatar	92"
    "12	2.0912076E7	24	0.0015314568179524198	com.pinterest	270"
    "13	2.07307E7	11	0.003384338372389061	com.cloudflare	370"
    "14	2.0698732E7	17	0.002180298705930751	com.wordpress	7034608"
    "15	2.061321E7	12	0.0030866221831772505	org.wordpress	2587"
    "16	2.0607942E7	26	0.0012410666338201117	org.wikipedia	1720"
    "17	2.0408594E7	14	0.002451586326769338	com.bootstrapcdn	42"
    "18	2.035154E7	20	0.0018233612484132521	com.apple	3296"
    "19	2.0148418E7	41	9.04397466958105E-4	com.blogspot	6580612"
    Mon objectif étant de:
    • Récupérer que le contenu de la colonne #host_rev, c'est à dire UNIQUEMENT les Noms de Domaines inversés;
    • Les modifier tous de façon correcte. Par exemple, tous les noms de domaine étant inversés (com.google, org.gmpg, com.facebook), il faudra les corriger normalement comme ceci: google.com, gmpg.org, facebook.com;
    • Stocker le format correcte et non inversés sans l'entête #host_rev dans un nouveau fichier Text au format .txt



    En effet, j'ai commencé d'abord à en extraire dans un tableau, la colonne #host_rev concernée en utilisant la fonction array_search avec mon Code ci-après:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    $csv = array_map("str_getcsv", file("Sample200.csv")); 
    $header = array_shift($csv); 
    // Seperate the header from data
     
    $array = [];
    $col = array_search("#host_rev", $header, true); 
     foreach ($csv as $row) {      
     $array[] = $row[$col]; 
    }
     
    print_r($array);
    Mais cela, me retourne à la fois la colonne #pr_val et #host_rev comme ceci:

    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
    Array (
    	[0] => 1 2.9977668E7 1 0.020841439972937113 com.googleapis 2207
    	[1] => 2 2.7867704E7 3 0.011812342801027227 com.facebook 5745
    	[2] => 3 2.741998E7 2 0.012857445865476182 com.google 2950
    	[3] => 4 2.519603E7 4 0.007273020531312286 com.twitter 1050
    	[4] => 5 2.4558836E7 5 0.0064389191631340215 org.w 73
    	[5] => 6 2.4533702E7 6 0.005983623364635486 com.youtube 2354
    	[6] => 7 2.2592098E7 9 0.003798771953622204 com.instagram 659
    	[7] => 8 2.206065E7 7 0.004856869480498758 org.gmpg 2
    	[8] => 9 2.1829028E7 13 0.0028634510908277706 com.linkedin 657
    	[9] => 10 2.1595446E7 8 0.004481096004418113 com.googletagmanager 26
    	[10] => 11 2.093092E7 22 0.001704104008072028 com.gravatar 92
    	[11] => 12 2.0912076E7 24 0.0015314568179524198 com.pinterest 270
    	[12] => 13 2.07307E7 11 0.003384338372389061 com.cloudflare 370
    	[13] => 14 2.0698732E7 17 0.002180298705930751 com.wordpress 7034608
    	[14] => 15 2.061321E7 12 0.0030866221831772505 org.wordpress 2587
    	[15] => 16 2.0607942E7 26 0.0012410666338201117 org.wikipedia 1720
    	[16] => 17 2.0408594E7 14 0.002451586326769338 com.bootstrapcdn 42
    	[17] => 18 2.035154E7 20 0.0018233612484132521 com.apple 3296
    	[18] => 19 2.0148418E7 41 9.04397466958105E-4 com.blogspot 6580612
    )
    Comment pourrais-je donc corriger mon code ci-dessus de sorte à récupérer seulement les noms de domaines inversés et les formater normalement pour qu'ils ne soient plus inversés et les stocker dans un fichier .txt ???

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Salut,
    Il doit y avoir plus simple a faire.
    Je part du principe que les domaine en se trouve pas toujours au même endroit dans le fichier.

    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
     
    <?php
    $data = [];
    $domaine = [];
    /**
     * Lit le fichier CSV et le transforme en tableau
     */
    $csv = file('Sample200.csv');
    /**
     * Parse l'entête du fichier CSV
     */
    $header = explode(' ',$csv[0]);
    /**
     * Compter le nombre d'éléments dans le tableau
     */
    $count = count($csv);
    /**
     * Parse le tableau CSV en tableau associatif d'après l'entête
     */
    for ($i = 1; $i < $count; $i++) {
        $line = explode(' ',$csv[$i]);
        for ($a=0, $aMax = count($header); $a < $aMax; $a++) {
            $data[$i][$header[$a]] = $line[$a];
        }
    }
    /**
     * Parse le tableau associatif en tableau associatif de domaine
     */
    foreach ($data as $element) {
        /**
         * inverse le nom et le domaine
         */
        [$d, $name] = explode('.', $element['#host_rev']);
        $domaine[] = $name.'.'.$d;
    }
     
    /**
     * Reste à créer le fichier txt
     */
    var_dump($domaine);

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Je partage ici le lien pour récupérer du Fichier CSV en question: https://easyupload.io/0hcn3r

    Déjà grand merci pour la réponse. Mais pour la réponse mais en en essayant le code, ça me renvoie un Undefined index comme erreur:

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32

    Notice: Undefined index: #host_rev in C:\laragon\www\test2.php on line 32

    Notice: Undefined offset: 1 in C:\laragon\www\test2.php on line 32
    array(19) { [0]=> string(1) "." [1]=> string(1) "." [2]=> string(1) "." [3]=> string(1) "." [4]=> string(1) "." [5]=> string(1) "." [6]=> string(1) "." [7]=> string(1) "." [8]=> string(1) "." [9]=> string(1) "." [10]=> string(1) "." [11]=> string(1) "." [12]=> string(1) "." [13]=> string(1) "." [14]=> string(1) "." [15]=> string(1) "." [16]=> string(1) "." [17]=> string(1) "." [18]=> string(1) "." }
    Pourquoi donc suis-je confronté à ce genre d'erreur et que mon objectif n'est pas toujours atteint ???

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Bonjour, impossible de télécharger votre fichier.
    Vu sa petite taille, vous pouvez le mettre ici.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Bonjour, impossible de télécharger votre fichier.
    Vu sa petite taille, vous pouvez le mettre ici.
    Quand j'essaie d'uploader un fichier ici, je reçois l'erreur suivante: Les erreurs suivantes sont survenues: Sample200.csv: Fichier non valide.


    Citation Envoyé par MaitrePylos Voir le message
    Bonjour, impossible de télécharger votre fichier.
    Je viens de l'ajouter sur un autre lien direct. Et je pense qu'il pourra être télécharger directement en cliquant sur le bouton Download data package ici: https://filetransfer.io/data-package/Ud6llFLy#link


    Merci de m'ai der s'il vous plaît.

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Bonjour,
    Votre fichier est mal interprété par PHP en cause les " supplémentaire entre chaque ligne, ainsi que les espaces qui on l'air d'être de taille différentes (bizarre).
    Du coup , il faut multiplier les traitements.

    Voici ce à quoi j'arrive, mais je suppose qu'il y a moyen d'optimiser.

    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
    47
    48
    49
    50
    51
    52
     
    <?php
    $data = [];
    $domaine = [];
    /**
     * Lit le fichier CSV et le transforme en tableau
     */
    $csv = file('Sample200.csv');
     
    /**
     * Parse l'entête du fichier CSV
     */
     
    $str = str_replace('"',' ',$csv[0]);
    $str = trim($str);
    $header = preg_split('/\s+/', $str);
     
     
    /**
     * Compter le nombre d'éléments dans le tableau
     */
    $count = count($csv);
    /**
     * Parse le tableau CSV en tableau associatif d'après l'entête
     */
    for ($i = 1; $i < $count; $i++) {
     
        $str = str_replace('"', ' ', $csv[$i]);
        $str = trim($str);
        $line = preg_split('/\s+/', $str);
     
        for ($a=0, $aMax = count($header); $a < $aMax; $a++) {
            $data[$i][$header[$a]] = $line[$a];
        }
    }
    /**
     * Parse le tableau associatif en tableau associatif de domaine
     */
     
     
    foreach ($data as $element) {
        /**
         * inverse le nom et le domaine
         */
        [$d, $name] = explode('.', $element['#host_rev']);
        $domaine[] = $name.'.'.$d;
    }
     
    /**
     * Reste à créer le fichier txt
     */
    var_dump($domaine);

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Merci pour votre réponse. Mais ça me retourne une 1ère ligne vide:

    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
     
    googleapis.com
    facebook.com
    google.com
    twitter.com
    w.org
    youtube.com
    instagram.com
    gmpg.org
    linkedin.com
    googletagmanager.com
    gravatar.com
    pinterest.com
    cloudflare.com
    wordpress.com
    wordpress.org
    wikipedia.org
    bootstrapcdn.com
    apple.com
    blogspot.com
    Quand je commente var_dump($domaine); et que pour les récupérer dans un Fichier Txt via le Header, j'ajoute:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // var_dump($domaine);
     
    header('Content-Type: text/txt; charset=utf-8'); 
    header('Content-Disposition: attachment; filename=DomainsList.txt'); 
     
    $txt = fopen('php://output', 'w');
    foreach($domaine as $value){
    	fwrite($txt, $value . PHP_EOL);
    }
    Comment donc supprimer la première Ligne VIDE qui apparaît dans le Fichier DomainsList.txt de sorte à ce que googleapis.com soit sur la première Ligne ???

  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Il suffit de supprimer l'élémént zéro du tableau $domaine

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Ok merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer le contenue d'une colonne sur Sharepoint dans une feuille Excel
    Par laura_duj dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/04/2016, 19h59
  2. Réponses: 8
    Dernier message: 10/04/2009, 08h51
  3. Récupérer le chiffre de la colonne d'un fichier Excel
    Par mouaa dans le forum VBA Access
    Réponses: 7
    Dernier message: 21/02/2008, 16h25
  4. Réponses: 1
    Dernier message: 29/09/2007, 09h46
  5. Réponses: 7
    Dernier message: 12/06/2007, 14h59

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