Comment corriger mon Code PHP pour récupérer le contenu de la colonne "#host_rev" du Fichier CSV et les formater en .TXT

Eléphant du PHP | 137 Messages

20 juin 2022, 21:53

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 : Tout sélectionner

<?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:
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" ???

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

20 juin 2022, 23:00

Développe d'abord avec un fichier d'une seul ligne, et ensuite augmente la complexité.

Il faut que tu avances dans ton debugage, vérifie avec des var_dump() les valeurs de tes variables et dis nous à quel endroit précis ton code ne fait pas ce qui est attendu.
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 2703 Messages

20 juin 2022, 23:07

https://regex101.com/r/VnIgsa/1 qui propose un generateur de code php.

Avatar du membre
Eléphanteau du PHP | 41 Messages

25 juin 2022, 14:01

j'ai cette idée simple pour toi
        $lines = file('mon_fichier_cvs.csv');
        $host = ['com', 'org', 'net']; // domaine etc.. 

        foreach ($lines as $line_num => $line) {
            list(
                $harmonicc_pos, 
                $harmonicc_val, 
                $pr_pos, 
                $pr_val, 
                $host_rev, 
                $n_hosts) = explode(chr(32), trim($line));
            
            // ici tu re explode ton contenu dans $host_rev
            $host_exp = explode('.', $host_rev);
            
            if (in_array($host_exp[0], $host)) { //si il trouve à $host_exp[0] un com,org, etc..
                // suite de ton code si host est normal
            } else {
                // suite de ton code pour host inversé
                // oubli pas tu as la fonction implode qui permet de recoler des portions de taleau
                // implode('.', ['google','com']) --> donnera google.com
                // donc tu peux jouer avec explode et implode
            }
        }

Eléphant du PHP | 137 Messages

26 juin 2022, 02:58

merci mais déjà fait depuis quelques jours. Merci qu'en même. Ça fait plaisir