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 :

Agrégation et comparaison de fichiers CSV / TXT


Sujet :

Langage PHP

  1. #1
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut Agrégation et comparaison de fichiers CSV / TXT
    Bonjour,

    Pour faire court voici mon code php :

    Code php : 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
     
    $in = fopen('C:\wamp\www\progs_infos_autos\fichierent1.txt', 'r');
    $in2 = fopen('C:\wamp\www\progs_infos_autos\fichierent2.txt', 'r');
    $out = fopen('C:\wamp\www\progs_infos_autos\fichiersortie.txt', 'a+'); 
     
    if ($in)
    {
     
    	while (!feof($in))
     
    	{
     
    		$buffer = fgets($in);
            $data_in = explode(';', $buffer);
     
    		if ($in2)
    		{
     
    			while (!feof($in2))
    			{
     
    			$buffer2 = fgets($in2);
    			$data_in2 = explode(';', $buffer2);
     
    			if ( substr(trim($data_in[3]),1,trim($data_in2[2])) = trim($data_in2[1])  
    				 and  trim($data_in[3]) = trim($data_in2[4]) 
    			     and strlen(trim($data_in[3]))=trim($data_in2[9])
    				)
     
    			{
     
    				$hi = 'Hello world';
    				echo $hi."\r\n";
     
    			}			
     
     
    			}
     
    		}
     
    	}
     
     
    }
     
    	fclose($in);
    	fclose($in2);
        fclose($out); 
     
    ?>

    J'ai un fichier 1 de 4 colonnes formalisé comme ceci :

    Code csv : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    clefnumerique1;codealphanumerique;chainetexte;infodivers
    1;AD;abc123456;toto
    12;M7;efg789000;toto2
    123;7Z;abcd123;toto3
    1234;99;LMP45678900;toto4
    12345;P7;FGTR978;toto5

    un fichier 2 avec 9 colonnes formalisé comme ceci :

    Code csv : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    plage;longueurplage;info1;codealphanumerique;info2;info3;info4;info5;longueurchainetexte
    abc;3;info1;AD;info2;info3;info4;info5;9
    abc;3;info1;7Z;info2;info3;info4;info5;9
    efg7;4;info1;M7;info2;info3;info4;info5;9
    LMP4;4;info1;99;info2;info3;info4;info5;11
    FGT;3;info1;P8;info2;info3;info4;info5;8

    Le but :

    * comparé "chainetexte" qui est dans le fichier 1 selon les critères de fichier 2
    * les premiers caractères de "chainetexte" doivent être identiques à "plage" et la longueur de "plage" doit être égale au premiers caractères de "chainetexte"
    * la longueur de "chainetexte" doit être exactement identique à "longueurchainetexte"
    * toujours parcourir l'ensemble l'ensemble du fichier 2 car plusieurs égalité peuvent exister
    * des qu'un égalité est détectée , noter plusieurs informations concaténé du fichier 1 et du fichier 2 dans le fichier de sortie

    J'ai une message d'erreur :

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    "Fatal error : can't use function return value in write context in [chemin du fichier] "

    Merci de m'aiguiller pour faire fonctionner ce programme php

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    dans le "if", vous avez mis des affectations avec "=". si vous voulez des comparaisons, utilisez "==" ou "===" :
    https://secure.php.net/manual/fr/lan...assignment.php
    https://secure.php.net/manual/fr/lan...comparison.php

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Attention, si tu dois parcourir le fichier 2 en entier pour chaque ligne du fichier 1, il va falloir remonter le curseur de lecture à la 1ère ligne à chaque fois. Pour ça, tu peux utiliser rewind.
    Si ton fichier 2 n'est pas trop gros, ça peut valoir le coup de commencer par intégralement avec file pour le stocker en mémoire, histoire de ne pas le lire, et le relire, et le re-re-lire...

    Au passage, pour manipuler un fichier CSV, tu peux utiliser fgetcsv (ou str_getcsv() si tu travailles à partir d'un tableau de lignes) et fputcsv, ça sera plus propre
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Bonjour.
    Par ailleurs, pourquoi tes fichiers csv ne portent pas l'extension csv ?
    https://fr.mailjet.com/support/comme...er-csv,469.htm
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Bonjour,

    J'ai optimisé le programme avec un "tableau" pour stocker la data du fichier 2. Effectivement relire plusieurs milliers de fois le même fichier si il y a 2000 ou 10000 ligne c'est bof :/

    Voici le code

    Code php : 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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    <?php
     
    $in = fopen('C:\chemin\fichierent1.csv', 'r');
    $in2 = fopen('C:\chemin\fichierent2.csv', 'r');
    $out = fopen('C:\chemin\fichiersortie.csv', 'a+'); 
     
    $i=0;
     
    if ($in2)
    {
     
    	while (!feof($in2))
     
    	{
     
    		$buffer2 = fgets($in2);
            $data_in2 = explode(';', $buffer2);
    		$i++;
    		$tab[i][0]=$data_in2[0];
    		$tab[i][1]=$data_in2[1];
    		$tab[i][2]=$data_in2[2];
    		$tab[i][3]=$data_in2[3];
    		$tab[i][4]=$data_in2[4];
    		$tab[i][5]=$data_in2[5];
    		$tab[i][6]=$data_in2[6];
    		$tab[i][7]=$data_in2[7];
    		$tab[i][8]=$data_in2[8];
     
    	}
    }
     
    $imax=$i;
     
    if ($in)
    {
     
    	while (!feof($in))
     
    	{
     
    		$buffer = fgets($in);
            $data_in = explode(';', $buffer);
     
    		for ($i2 = 1; $i2 <= $imax ; $i2++)
    		{
     
    			if ( substr(trim($data_in[2]),1,($tab[$i2][1])+0) === trim($tab[$i2][0]) )
    			{
     
    				if (strlen(trim($data_in[2])) === (($tab[$i2][8])+0))
     
    				{
     
    					$data_out=$data_in[0].';'.$data_in[1].';'.$data_in[2].';'.$tab[$i2][2].';'.$tab[$i2][3].';'.$tab[$i2][5].';'.$tab[$i2][6].';'.$tab[$i2][7].'\r\n';
    					fputs($out, $data_out);
     
    				}
     
     
    			}
     
    		}
     
    	}
    }
     
    	fclose($in);
    	fclose($in2);
        fclose($out); 
     
    ?>

    Un jeu de données test dans "fichier 1" :

    Code csv : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    888888888;ZZ;13414111234;a1
    999999991;ZZ;13153540000;a1
    999999992;ZZ;15578060000;a1
    999999993;ZZ;8125640000;a1
    999999993;ZZ;8125650000;a1
    999999999;ZZ;15578090000;a1
    999999995;ZZ;15577790000;a1
    999999996;ZZ;15577750000;a1
    999999997;ZZ;15577760000;a1
    999999999;ZZ;5578090000;a1
    999999998;ZZ;15578020000;a1
    999999988;ZZ;15578030000;a1
    999999956;ZZ;5578040000;a1
    999999944;ZZ;15578050000;a1

    Un exemple pour le fichier 2 :

    Code csv : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    1341411;7;info1;zz;Z052;info2;instruction 1;;11
    1315354;7;info1;zz;Z052;info2;instruction 1;;11
    1557806;7;info1;zz;Z052;info2;instruction 1;;11
    1341420;7;info1;zz;Z052;info2;instruction 1;;11
    1557809;7;info1;zz;Z052;info2;instruction 1;;11
    1557779;7;info1;zz;Z052;info2;instruction 1;;11
    1557775;7;info1;zz;Z052;info2;instruction 1;;11
    1341437;7;info1;zz;Z052;info2;instruction 1;;11
    1557802;7;info1;zz;Z052;info2;instruction 1;;11
    1557803;7;info1;zz;Z052;info2;instruction 1;;11

    Je viens de corriger l'extension de .txt a .csv

    Mon fichier de sorti reste mystérieusement vide

  6. #6
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Procède par étapes.
    Tu as des conditions fort mystérieuses... pas étonnant que tu te trompes.
    Donc commence par afficher ce que tu cherches à comparer.
    Et tu verras après ces histoires de fichier final à produire.

    Pour info, tu n'en es pas à optimiser, tu en es à produire un code qui tourne.

    Quand tout sera nickel au niveau d'une exécution, tu t'occuperas de faire plus propre, plus lisible et plus rapide.
    Repars de ceci par exemple :
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    <?php
     
    $in = fopen('C:\chemin\fichierent1.csv', 'r');
    $in2 = fopen('C:\chemin\fichierent2.csv', 'r');
    $out = fopen('C:\chemin\fichiersortie.csv', 'a+'); 
     
    $i=0;
     
    if ($in2)
    {
     
    	while (!feof($in2))
     
    	{
     
    		$buffer2 = fgets($in2);
            $data_in2 = explode(';', $buffer2);
    		$i++;
    		$tab[i][0]=$data_in2[0];
    		$tab[i][1]=$data_in2[1];
    		$tab[i][2]=$data_in2[2];
    		$tab[i][3]=$data_in2[3];
    		$tab[i][4]=$data_in2[4];
    		$tab[i][5]=$data_in2[5];
    		$tab[i][6]=$data_in2[6];
    		$tab[i][7]=$data_in2[7];
    		$tab[i][8]=$data_in2[8];
     
    	}
    }
     
    //$imax=$i;
    $imax=10;//pour tester
    if ($in)
    {
     
    	while (!feof($in))
     
    	{
     
    		$buffer = fgets($in);
            $data_in = explode(';', $buffer);
     
    		for ($i2 = 1; $i2 <= $imax ; $i2++)
    		{
     
    			if ( substr(trim($data_in[2]),1,($tab[$i2][1])+0) === trim($tab[$i2][0]) )
    			{
    				echo $i2.' - condition 1 remplie !<br/>';
     
    				if (strlen(trim($data_in[2])) === (($tab[$i2][8])+0))
     
    				{
    					echo $i2.' - condition 2 remplie !<br/>';
     
    					/*$data_out=$data_in[0].';'.$data_in[1].';'.$data_in[2].';'.$tab[$i2][2].';'.$tab[$i2][3].';'.$tab[$i2][5].';'.$tab[$i2][6].';'.$tab[$i2][7].'\r\n';
    					fputs($out, $data_out);
    					*/
     
    				}
    				else{
    					echo $i2.' - '.strlen(trim($data_in[2])).'!=='.(($tab[$i2][8])+0).'<br/>';
    				}
     
     
    			}
    			else{
    				echo $i2.' - '.substr(trim($data_in[2]),1,($tab[$i2][1])+0).'!=='. trim($tab[$i2][0].'<br/>';
    			}
     
    		}
     
    	}
    }
     
    	fclose($in);
    	fclose($in2);
        fclose($out); 
     
    ?>
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    encore un dernier conseil pour que tu avances vraiment par toi-même, je te donne juste le découpage en reprenant ce que tu as de bon :
    Tu dois réfléchir, boucher les points d'interrogation, et tu auras tes tests cohérents.
    Au fait, il fonctionne comme tu veux ton $tab ? $tab[i][4] ? really ? et il n'est pas initialisé ? Et tu n'as pas de message d'erreur ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<pre>';
    print_r($tab);
    echo '</pre>';
    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
     
    for ($i2 = 1; $i2 <= $imax ; $i2++)
    		{
    			//fichier 1, champ 2
    			$chaine=trim($data_in[$i2][2]);
    			//fichier 2, champ 0 commence par chaine
    			$check_chaine=?;
    			//vérification quand ça matche
    			if($check_chaine){
    				echo $chaine. 'commence bien par ? <br/> ';
    			}
    			else{
    				echo $chaine. 'NE commence PAS par ? <br/> ';
    			}
    			//longueur de chaine est bien reportée sur fichier 2
    			$check_longueur=strlen($chaine)==(int) $tab?;
    			//vérification quand ça matche
    			if($check_longueur){
    				echo $chaine. ' longueur '.strlen($chaine).' ou  ?<br/>';
    			}
    			else{
    				echo $chaine. ' longueur '.strlen($chaine).' ET PAS ?<br/>';
    			}
    			//ton code est plus lisible
    			if($check_chaine && $check_longueur){
    				echo 'youpi, je peux récupérer celui-là !<br/>';
    			}	
    }
    edit : une question (bête forcément) me vient en tête. A partir de quoi construis-tu ton fichier CSV, pas une base de données, si ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    PHP semble avoir un problème ... Quand j'utilise la même valeur présente dans un tableau sous la forme $tab[$i][8] , j'ai 3 état différents .

    $tab[$i][8] = null = 0 = une valeur numérique

    Avant le if $tab[$i][8] = une valeur numérique
    dans la condition du if $tab[$i][8] = 0
    dans le if $tab[$i][8] = null

    Sans rien change ...

    Depuis quand une valeur a 3 états différents ? Pour rappel c'est strictement impossible d'avoir 3 états différents ...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    //$tab[$y][1] = 7
    if ( substr(trim($data_in[2]),1,$tab[$y][1]) === $tab[$y][0] ) // $tab[$y][1]= 0 
    			{	
     
                               // $tab[$y][1] = null
     
     
    				if ( strlen(trim($data_in[2])) === $tab[$y][8] )
    				{
     
     
    				}
    			}

    Au fait, il fonctionne comme tu veux ton $tab ? $tab[i][4] ? really ?
    Qu'entend du par il fonctionne comme je veux ?

    et il n'est pas initialisé ?
    Si il est initialiser au début i=0 au début

    Et tu n'as pas de message d'erreur ?
    Le tableau se remplie normalement.

    Code php : 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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    <?php
     
    $in = fopen('C:\chemin\fichierent1.csv', 'r');
    $in2 = fopen('C:\chemin\fichierent2.csv', 'r');
    //$out = fopen('C:\chemin\fichiersortie.csv', 'a+'); 
     
    $i=0;
     
    if ($in2)
    {
     
    	while (!feof($in2))
     
    	{
     
    		$buffer2 = fgets($in2);
            $data_in2 = explode(';', $buffer2);
    		$i++;
    		$tab[$i][0]=$data_in2[0];
    		$tab[$i][1]=(int) $data_in2[1];
    		$tab[$i][2]=$data_in2[2];
    		$tab[$i][3]=$data_in2[3];
    		$tab[$i][4]=$data_in2[4];
    		$tab[$i][5]=$data_in2[5];
    		$tab[$i][6]=$data_in2[6];
    		$tab[$i][7]=$data_in2[7];
    		$tab[$i][8]=(int) $data_in2[8];
     
    	}
    }
     
    $imax=$i;
     
    if ($in)
    {
     	while (!feof($in))
     	{
     		$buffer = fgets($in);
            $data_in = explode(';', $buffer);
    		for ($y= 1; $y <= $imax ; $y++)
    		{	
    		    $chaine = substr(trim($data_in[2]),1,$tab[$y][1]) ;
    			$check_chaine = $tab[$y][0];
    			if ( $chaine === $check_chaine )
    			{	
    				echo $chaine. 'commence bien par ? <br/> ';
    			}
    			else
    			{
    				echo $chaine. 'NE commence PAS par ? <br/> ';
    			}
     
    			$check_longueur=strlen(trim($data_in[2]));
    			$longueur=(int)$tab[$y][8];
     
    				if ( $check_longueur === $longueur )
    				{
    					echo $chaine. ' longueur '.$check_longueur.' ou  ?<br/>';
    				}
    				else
    				{
    				echo $chaine. ' longueur '.$check_longueur.' ET PAS ?<br/>';
    				}									
    			}
    			}
     
     
    		}
     
     
     
    	fclose($in);
    	fclose($in2);
        /*fclose($out); 
    	*if ( strlen(trim($data_in[2])) ==  $nombre )
    				{
    				
    				    
    					/*$data_out=$data_in[0].';'.$data_in[1].';'.$data_in[2].';'.$tab[$i2][2].';'.$tab[$i2][3].';'.$tab[$i2][5].';'.$tab[$i2][6].';'.$tab[$i2][7].'\r\n';
    					fputs($out, $data_out);
    				
    				}*/
     
    ?>

    La colonne 2 et la colonne 9 du tableau sont des colonnes numériques. Lors des comparaisons je vois pas pourquoi celle ci redviennent à 0 comme par enchantement ...

    edit : une question (bête forcément) me vient en tête. A partir de quoi construis-tu ton fichier CSV, pas une base de données, si ?
    Cela vient d'un fichier csv brut.

  9. #9
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Tu initialises le compteur, mais pas le tableau.
    ta chaine, ça serait pas plutôt ça ?
    Ou bien c'est moi qui comprend pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine=trim($data_in[$y][2]);
    Pourquoi tu ne copies colles pas l'affichage si tu veux qu'on t'aide ?

    tu n'as pas compris un truc : les variables check : pour découper des conditions complexes, on peut les ranger dans des variables intermédiaires de type booléen.
    On range le résultat d'une comparaison dans une variable true ou false.
    La première fois, ça parait bizarre, mais pour relire ton code, ça devient super clair. Ci-dessous, la variable septuagenaire est une variable booléenne intermédiaire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //exemple :
    $septuagenaire=$age>=70 && $age<80 &&  $deces_date=="";
    if($septuagenaire){
       //septuagenaire vaudra d'emblée true ou false
    }
    Mais bon, oublie les si tu n'aimes pas... c'est pas grave.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    Tu initialises le compteur, mais pas le tableau.
    Ah oui , vu ! J'ai ajouté le array , je l'avais oublié.

    Citation Envoyé par Dendrite Voir le message
    ta chaine, ça serait pas plutôt ça ? Ou bien c'est moi qui comprend pas ?
    Je doit bien utiliser le substring . La chaine a contrôler qui est dans le fichier 1 doit répondre a deux conditions qui sont dans le fichier 2 .

    Deux condition :

    * la longueur total de la chaine du fichier 1 doit correspondre à la longueur indiquer dans le fichier 2
    * le debut de la chaine du fichier 1 doit etre identique à la chaine de référence du fichier 2.

    Code txt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    123456;ZZ;13414111234;a1 > fichier 1
    123456;ZZ;3414111234;a1 > fichier 1
    123456;ZZ;1341411123;a1 > fichier 1
     
    1341411;7;info1;zz;Z052;info2;instruction 1;;11 > fichier 2
     
    exemple 1 > 13414111234 > ok 
    exemple 2 > 3414111234 > non ok
    exemple 3 > 1341411123 > non ok

    Tu arrives a piger le truc ?

    Citation Envoyé par Dendrite Voir le message
    tu n'as pas compris un truc : les variables check : pour découper des conditions complexes, on peut les ranger dans des variables intermédiaires de type booléen.
    On range le résultat d'une comparaison dans une variable true ou false.
    La première fois, ça parait bizarre, mais pour relire ton code, ça devient super clair. Ci-dessous, la variable septuagenaire est une variable booléenne intermédiaire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //exemple :
    $septuagenaire=$age>=70 && $age<80 &&  $deces_date=="";
    if($septuagenaire){
       //septuagenaire vaudra d'emblée true ou false
    }
    Mais bon, oublie les si tu n'aimes pas... c'est pas grave.
    J'utilise assez peu voir jamais les imbrications de comparaison avec un boolean en toute franchise . J'ai vraiment du mal avec les imbrications booleans , j'ai laissé pour le moment les conditions "classiques" avec les if else.

    J'ai retapé le programme de la sorte avec plus de commentaire et en donnant d'autres noms intermediaire :

    Code php : 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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    <?php
     
    $in = fopen('C:\chemin\fichierent1.csv', 'r'); //fichier de donnees brutes
    $in2 = fopen('C:\chemin\fichierent2.csv', 'r'); // fichier des calibres pour controles
    //$out = fopen('C:\chemin\fichiersortie.csv', 'a+'); // fichier de sortie
     
    $i=0; // initialisation de i à 0 
    $tab=array(); // initialisation du tableau 
     
    if ($in2)
    {
     
    	while (!feof($in2))
     
    	{
     
    		$buffer2 = fgets($in2);
            $data_in2 = explode(';', $buffer2);
     
    		$i++; 
     
    		// rangement des données du fichier 2 csv dans un table php
    		$tab[$i][0]=$data_in2[0];
    		$tab[$i][1]=(int) $data_in2[1]; // colonne 2 du fichier csv de type numerique , la fonction "(int) $nomdevariable " doit convertir une chaine en numerique 
    		$tab[$i][2]=$data_in2[2];
    		$tab[$i][3]=$data_in2[3];
    		$tab[$i][4]=$data_in2[4];
    		$tab[$i][5]=$data_in2[5];
    		$tab[$i][6]=$data_in2[6];
    		$tab[$i][7]=$data_in2[7];
    		$tab[$i][8]=(int) $data_in2[8]; // colonne 9 du fichier csv de type numerique , la fonction "(int) $nomdevariable " doit convertir une chaine en numerique
     
    	}
    }
     
    $imax=$i; // sauvegarde la valeur maximum de i
     
    if ($in)
    {
     	while (!feof($in))
     	{
     		$buffer = fgets($in);
            $data_in = explode(';', $buffer);
     
    		// pour chaque ligne du fichier 1 on va lui faire parcourir le tableau ou l'on stocke les données du fichier 2 csv
     
    		for ($y= 1; $y <= $imax ; $y++) // on va a chaque fois parcourir le tableau qui contient les données du fichier 2 de la 1ere a la derniere ligne 
    		{	
     
    			$chaine=trim($data_in[2]); // chaine venant du fichier 1
    			$debutchaine=substr(trim($chaine),1,$tab[$y][1]); // le debut de chaine venant du fichier 1 est stockée dans une variable
    			$chainedereference=$tab[$y][0] ; // on conserve une copie de la chaine de reference
    			$longueurchaine=strlen($chaine)); // on garde un copie de la longueur de la chaine venant du fichier 1
    			$longueurreference=$tab[$y][8];	// on garde une copie de la longueur de reference indiqué dans le fichier 2
    		    // $tab[$y][1] contient bien une valeur 
    			if ( $longueurdebutchaine === $chainedereference) // $tab[$y][1] passe à 0 sans explication
    			{
    				// $tab[$y][1] passe a vide sans explication
    				echo $debutchaine. 'commence bien par le bon debut de chaine <br/> ';
     
    				// $tab[$y][8] vaut 0 alors qu'il doit valoir la valeur stocker dans le tableau ... qui n'est absolument pas 0 !
    				if ( $longueurchaine === $longueurreference ) // $tab[$y][8] vaut 0 alors qu'il doit valoir la valeur stocker dans le tableau ... qui n'est absolument pas 0 !
    				{
    					// $tab[$y][8] vaut 0 alors qu'il doit valoir la valeur stocker dans le tableau ... qui n'est absolument pas 0 !
    					echo " la longueur est correct </br> ";
    					// si les conditions sont respectées ranger une concatenation de plusieurs champs dans le fichier de sortie 
    					//$data_out=$data_in[0].';'.$data_in[1].';'.$data_in[2].';'.$tab[$i2][2].';'.$tab[$i2][3].';'.$tab[$i2][5].';'.$tab[$i2][6].';'.$tab[$i2][7].'\r\n';
    					//fputs($out, $data_out);
     
    				}
    				else 
    				{
     
    					echo " la longueur est incorrect </br> ";
     
    				}			
     
    			}
    			else 
    			{
    				// $tab[$y][1] passe a vide sans explication
    				echo $debutchaine. 'NE commence PAS par le bon debut de chaine <br/> ';
     
    			}
     
    		}
     
         }
     
    }
     
    	// fermeture de tous les fichiers
    	fclose($in); 
    	fclose($in2);
        //fclose($out);
     
    ?>

  11. #11
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Je t'ai déjà donné la solution. Si tu ne l'utilises pas... tant pis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine=trim($data_in[$y][2]);
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  12. #12
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Bonjour

    Citation Envoyé par Dendrite Voir le message
    Je t'ai déjà donné la solution. Si tu ne l'utilises pas... tant pis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine=trim($data_in[$y][2]);
    Pas d'inquiétude j'ai bien utilisé votre solution . La seule chose que je n'ai pas utilisé c'est les "booléens" pas très a l'aise avec ce type de notation

    Voici un code qui fonctionne avec vos remarques :

    Code php : 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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    <?php
     
    $in = fopen('C:\chemin\fic1.csv', 'r'); //fichier de donnees brutes
    $in2 = fopen('C:\chemin\fic2.csv', 'r'); // fichier des calibres pour controles
    $out = fopen('C:\chemin\fichiersortie.csv', 'a+'); // fichier de sortie
     
    $i=0; // initialisation de i à 0 
    $tab=array(); // initialisation du tableau 
     
    if ($in2)
    {
     
    	while (!feof($in2))
     
    	{
     
    		$buffer2 = fgets($in2);
            $data_in2 = explode(';', $buffer2);
     
    		$i++; 
     
    		// rangement des données du fichier 2 dans un tableau php
    		$tab[$i][0]=$data_in2[0];
    		$tab[$i][1]=$data_in2[1]; // colonne 2 du fichier csv de type numerique 
    		$tab[$i][2]=$data_in2[2];
    		$tab[$i][3]=$data_in2[3];
    		$tab[$i][4]=$data_in2[4];
    		$tab[$i][5]=$data_in2[5];
    		$tab[$i][6]=$data_in2[6];
    		$tab[$i][7]=$data_in2[7];
    		$tab[$i][8]=$data_in2[8]; // colonne 9 du fichier csv de type numerique
     
    	}
    }
     
    $imax=$i; // sauvegarde la valeur maximum de i
     
    if ($in)
    {
     	while (!feof($in))
     	{
     		$buffer = fgets($in);
            $data_in = explode(';', $buffer);
     
    		// pour chaque ligne du fichier 1 on va lui faire parcourir le tableau ou l'on stocke les données du fichier 2 csv
     
    		for ($y= 1; $y <= $imax ; $y++) // on va a chaque fois parcourir le tableau qui contient les données du fichier 2 de la 1ere a la derniere ligne 
    		{	
     
    			$id=$data_in[0]; // id unique
    			$info1=$data_in[1]; // information 1 
    			$chainealphanumerique=$data_in[2]; // chaine du fichier 1
    			$longd=substr($chainealphanumerique,0,$tab[$y][1]); // le debut de chaine venant du fichier 1 est stockée dans une variable
    			$plage=$tab[$y][0] ; // on conserve une copie de la chaine de reference
    			$longchainealphanumerique=strlen($chainealphanumerique); // on garde un copie de la longueur de la chaine venant du fichier 1
    			$longt=$tab[$y][8];	// on garde une copie de la longueur de reference indiqué dans le fichier 2
    			$info2=$tab[$y][2]; //information 2
    			$info3=$tab[$y][3]; //information 3
    			$info4=$tab[$y][5];// information 4
    			$info5=$tab[$y][6];// information 5
    			$info6=$tab[$y][7];// information 6
     
    		    if ( $longd === $plage) 
    			{
     
    				if ( $longchainealphanumerique == $longt ) 
    				{
     
    					if ( $info1 === $info3 )
    					{
     
    						$data_out=$cls.';'.$chainealphanumerique.';'.$info1.';'.$info2.';'.$info3.';'.$info4.';'.$info5.';'.$info6."\r\n";
    						//echo $data_out." </br> ";
    						fputs($out, $data_out);	
     
    					}				
     
    				}
     
    			}
     
    		}
     
    	}
     
    }
     
    	// fermeture de tous les fichiers
    	fclose($in); 
    	fclose($in2);
        fclose($out);
     
    ?>

    Je vous remercie d'avance

  13. #13
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Bon, cool si ça marche.
    Mais là normalement, t'étais pas censé partir lol. T'étais censé ajouter "bon, ça tourne. Qu'est-ce que je peux optimiser maintenant ?"
    Celira avait soufflé plein d'idées géniales que tu n'étais pas en mesure de comprendre... Ca vaudrait le coup d'y revenir.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  14. #14
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Quelques simplifications et améliorations possibles :
    Utiliser fgetcsv au lieu de fgets + explode
    Affecter le tableau de données en une seule instruction. Tu n'es pas obligé de recopier case par case/
    Fermer les fichiers dès que tu ne les utilises plus
    Utiliser fputcsv pour écrire les lignes dans le fichier de sortie au lieu de la concaténation et fputs
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    <?php
     
    $i=0; // initialisation de i à 0 
    $tab=array(); // initialisation du tableau 
     
    $in2 = fopen('C:\chemin\fic2.csv', 'r'); // fichier des calibres pour controles 
    if ($in2)
    {
     
    	while ($data_in2 = fgetcsv($in2, 0, ';'))
    	{
    		$i++;
    		// rangement des données du fichier 2 dans un tableau php
    		$tab[$i]=$data_in2;
     
    	}    
        fclose($in2); // fermeture du fichier 2
    }
     
    $imax=$i; // sauvegarde la valeur maximum de i
     
    $in = fopen('C:\chemin\fic1.csv', 'r'); //fichier de donnees brutes
    $out = fopen('C:\chemin\fichiersortie.csv', 'a+'); // fichier de sortie
    if ($in)
    {
     	while ($data_in = fgetcsv($in, 0, ';'))
     	{
     
    		// pour chaque ligne du fichier 1 on va lui faire parcourir le tableau ou l'on stocke les données du fichier 2 csv
    		for ($y= 1; $y <= $imax ; $y++) // on va a chaque fois parcourir le tableau qui contient les données du fichier 2 de la 1ere a la derniere ligne 
    		{	
     
    			$id=$data_in[0]; // id unique
    			$info1=$data_in[1]; // information 1 
    			$chainealphanumerique=$data_in[2]; // chaine du fichier 1
    			$longd=substr($chainealphanumerique,0,$tab[$y][1]); // le debut de chaine venant du fichier 1 est stockée dans une variable
    			$plage=$tab[$y][0] ; // on conserve une copie de la chaine de reference
    			$longchainealphanumerique=strlen($chainealphanumerique); // on garde un copie de la longueur de la chaine venant du fichier 1
    			$longt=$tab[$y][8];	// on garde une copie de la longueur de reference indiqué dans le fichier 2
    			$info2=$tab[$y][2]; //information 2
    			$info3=$tab[$y][3]; //information 3
    			$info4=$tab[$y][5];// information 4
    			$info5=$tab[$y][6];// information 5
    			$info6=$tab[$y][7];// information 6
     
    		    if ( $longd === $plage) 
    			{
    				if ( $longchainealphanumerique == $longt ) 
    				{
    					if ( $info1 === $info3 )
    					{
                            $data_out = array($cls, $chainealphanumerique, $info1, $info2, $info3, $info4, $info5, $info6);
    						//echo $data_out." </br> ";
    						fputcsv($out, $data_out, ';');	
    					}				
    				}
    			}
    		}
    	}
    }
     
    	// fermeture de tous les fichiers
    	fclose($in);
        fclose($out);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  15. #15
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Bonjour

    Citation Envoyé par Dendrite Voir le message
    Bon, cool si ça marche.
    Mais là normalement, t'étais pas censé partir lol. T'étais censé ajouter "bon, ça tourne. Qu'est-ce que je peux optimiser maintenant ?"
    D'accord , qu'est ce qu'il est possible d'optimisier ?

    Citation Envoyé par Dendrite Voir le message
    Celira avait soufflé plein d'idées géniales que tu n'étais pas en mesure de comprendre... Ca vaudrait le coup d'y revenir.
    C'est a dire ? Je suis tout oue=ie

    Citation Envoyé par Celira Voir le message
    Quelques simplifications et améliorations possibles :
    Utiliser fgetcsv au lieu de fgets + explode
    Affecter le tableau de données en une seule instruction. Tu n'es pas obligé de recopier case par case/
    Fermer les fichiers dès que tu ne les utilises plus
    Utiliser fputcsv pour écrire les lignes dans le fichier de sortie au lieu de la concaténation et fputs
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    <?php
     
    $i=0; // initialisation de i à 0 
    $tab=array(); // initialisation du tableau 
     
    $in2 = fopen('C:\chemin\fic2.csv', 'r'); // fichier des calibres pour controles 
    if ($in2)
    {
     
    	while ($data_in2 = fgetcsv($in2, 0, ';'))
    	{
    		$i++;
    		// rangement des données du fichier 2 dans un tableau php
    		$tab[$i]=$data_in2;
     
    	}    
        fclose($in2); // fermeture du fichier 2
    }
     
    $imax=$i; // sauvegarde la valeur maximum de i
     
    $in = fopen('C:\chemin\fic1.csv', 'r'); //fichier de donnees brutes
    $out = fopen('C:\chemin\fichiersortie.csv', 'a+'); // fichier de sortie
    if ($in)
    {
     	while ($data_in = fgetcsv($in, 0, ';'))
     	{
     
    		// pour chaque ligne du fichier 1 on va lui faire parcourir le tableau ou l'on stocke les données du fichier 2 csv
    		for ($y= 1; $y <= $imax ; $y++) // on va a chaque fois parcourir le tableau qui contient les données du fichier 2 de la 1ere a la derniere ligne 
    		{	
     
    			$id=$data_in[0]; // id unique
    			$info1=$data_in[1]; // information 1 
    			$chainealphanumerique=$data_in[2]; // chaine du fichier 1
    			$longd=substr($chainealphanumerique,0,$tab[$y][1]); // le debut de chaine venant du fichier 1 est stockée dans une variable
    			$plage=$tab[$y][0] ; // on conserve une copie de la chaine de reference
    			$longchainealphanumerique=strlen($chainealphanumerique); // on garde un copie de la longueur de la chaine venant du fichier 1
    			$longt=$tab[$y][8];	// on garde une copie de la longueur de reference indiqué dans le fichier 2
    			$info2=$tab[$y][2]; //information 2
    			$info3=$tab[$y][3]; //information 3
    			$info4=$tab[$y][5];// information 4
    			$info5=$tab[$y][6];// information 5
    			$info6=$tab[$y][7];// information 6
     
    		    if ( $longd === $plage) 
    			{
    				if ( $longchainealphanumerique == $longt ) 
    				{
    					if ( $info1 === $info3 )
    					{
                            $data_out = array($cls, $chainealphanumerique, $info1, $info2, $info3, $info4, $info5, $info6);
    						//echo $data_out." </br> ";
    						fputcsv($out, $data_out, ';');	
    					}				
    				}
    			}
    		}
    	}
    }
     
    	// fermeture de tous les fichiers
    	fclose($in);
        fclose($out);
    Je vais étudier le code avec attention . Je ne suis pas une spécialiste du php a part quelques bricole de ci de la , j’apprends sur le tas a obtenir un truc qui fonctionne .

    Question : en injectant les deux fichiers dans des tableaux est ce que cela ne sera pas plus rapide pour comparer ? Pour éviter le lire plusieurs milliers de fois le même fichier ... ? Seulement à la fin j'envoie toutes les données dans le fichier de sortie. Je sais pas si vous voyez ou je veux en venir ?

    Merci d'avance

  16. #16
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Le tout dans des tableaux ne me parait pas forcément super pour plusieurs raisons :
    • Les tableaux sont en mémoire, alors que quand tu lis un fichier, tu ne garde que la ligne en cours en mémoire. Sur les gros fichiers, ça peut avoir un sacré impact.
    • Dans ton cas, tu ne lis pas plusieurs fois le fichier1 : tu le lis une fois, et tu fais un traitement pour chaque ligne (en utilisant le fichier2 qui est bien chargé une seule fois dans un tableau lui)
    • Pour l'écriture dans le fichier de sortie, pareil que pour la lecture : si tu stockes les données dans un tableau, tu occupes de la mémoire, alors que si tu écris ligne à ligne c'est moins lourd.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

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

Discussions similaires

  1. Importer fusionner fichiers csv,txt
    Par christine854 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 11/09/2016, 17h20
  2. Réponses: 3
    Dernier message: 11/01/2015, 20h00
  3. Comparaison de fichiers csv
    Par sebastien-p dans le forum Général Python
    Réponses: 7
    Dernier message: 05/02/2014, 17h40
  4. Réponses: 11
    Dernier message: 27/10/2008, 09h15

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