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 :

affectation de numéro


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 604
    Points
    4 604
    Par défaut affectation de numéro
    Bonjour,

    Je dispose d'une table de données dans la quelle je viens stocker du mail suite à un envoi de mailing. Plusieurs milliers d'enregistrements sont dans cette table.

    Je souhaite automatiser une affectation de numéro d'envoi d'email.

    A chaque fois je calcul le nombre maximum de lignes dans ma base. J'ajoute +1 et je numérote mes lignes à intégrer. Je passe par excel , mais cela devient vite compliqué quand il y a des caractères merdiques comme des égales qui font que je perd des lignes lors de mon copier vers un fichier texte d'intégration . J'ai un jolie "#noms" au lieu de ma concaténation de valeurs ...

    Pour cela je veux passer par du php.

    J'ai un fichier d'entrée avec 2 colonnes. Le mail + un pseudo. Dans mon cas je vais supposer que j'ai 10000 lignes en base j'en ajoute 500 . Je veux que en sortie j'ai un fichier numéroter de 10001 à 10500 que je puisse intégrer.

    Voici le code numérotation qui m'a l'air de planter.

    Merci de m'aiguiller

    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
    <?php
     
    //fichier d'entree et de sortie
     
    $fichier_ent='C:\wamp\www\progs_infos_autos\fic_ent.txt';
    $fichier_sor='C:\wamp\www\progs_infos_autos\fic_sor.txt';
     
    //controle de l'existance du fichier si present
     
    if (file_exists($fichier_ent)) 
    {
    	$fp = fopen($fichier_ent, 'r');
    	while (!feof($fp))
      {
    	   $ligne = trim(fgets($fp));
     
    		$cpt++;
    	}
     
    }
     
    //traitement du fichier
     
    $fic_ent =  file("C:\wamp\www\progs_infos_autos\fic_ent.txt");
     
    // creation de boucle pour extraire d'un fichier + affecter un numero et remettre dans un nouveau fichier
     
    for ($i=10001;$i<=10500;$i++)
    { 
     
    // extraction de la ligne courante avec retraitement pour basculement dans le nouveau fichier
     
    $Champ = explode(":",$fic_ent[$i]);
     
    // concatenation avec le numero a affecter
     
    $chaine=$i.";".$Champ[0].";;;;;;;;;;;;;;;;;;;;;;;;;;;;;".$Champ[1].";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n" ;
     
    //ecriture dans le fichier
     
    fputs ($fichier_sor, $chaine);
     
    }
     
    // fermeture de tous les fichiers
     
    fclose ($fichier_ent);
    fclose ($fichier_sor);   
     
    ?>

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    je ne vois pas le problème à partir du moment où la table a un index auto-incrémenté, qui, comme son nom l'indique, va s'incrémenter automatiquement (et sera unique).
    Dans la requête INSERT, il suffit de mettre ce champ à 0 (zéro), ou simplement de ne pas l'inclure dans la liste des champs.

    [EDIT] Tu parles de "table" et de "base", mais le code fourni montre la lecture/écriture de fichiers texte...

    (-> discussion déplacée)
    Dernière modification par Invité ; 25/07/2016 à 07h33.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 15
    Points : 35
    Points
    35
    Par défaut
    Tu essais d'écrire dans $fichier_sor mais tu ne l'as jamais ouvert avec fopen, $fichier_sor n'est qu'une chaîne de caractères contenant le chemin vers le fichier (déclarée à la ligne 6). Même remarque pour $fichier_ent.

    Je tiens également à signaler que le code à l'intérieur de `if (file_exists($fichier_ent))` ne sert pas à grand chose puisque la variable $cpt n'est jamais utilisée.

  4. #4
    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 604
    Points
    4 604
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    je ne vois pas le problème à partir du moment où la table a un index auto-incrémenté, qui, comme son nom l'indique, va s'incrémenter automatiquement (et sera unique).
    Dans la requête INSERT, il suffit de mettre ce champ à 0 (zéro), ou simplement de ne pas l'inclure dans la liste des champs.

    [EDIT] Tu parles de "table" et de "base", mais le code fourni montre la lecture/écriture de fichiers texte...
    Bonsoir

    * Ici on est bien sur un traitement de fichier , non un traitement de table de base de données.
    * Dans mon cas présent on oublie je le sql et on se concentre sur le php. Ici j'impose une certaine numérotation via mon php.


    Citation Envoyé par Hassan. Voir le message
    Tu essais d'écrire dans $fichier_sor mais tu ne l'as jamais ouvert avec fopen, $fichier_sor n'est qu'une chaîne de caractères contenant le chemin vers le fichier (déclarée à la ligne 6). Même remarque pour $fichier_ent.

    Je tiens également à signaler que le code à l'intérieur de `if (file_exists($fichier_ent))` ne sert pas à grand chose puisque la variable $cpt n'est jamais utilisée.
    Bonsoir

    * Tu dis que je n'ouvre pas mon fichier . Pourtant on me dit que j'ouvre bien le fichier avec la fonction php " fopen($fichier_ent, 'r'); " ?
    * Le compteur doit obligatoirement etre utilisé . Sans son utilisation la numérotation ne peut pas se faire .

    Voici un code retravaillé :

    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
    <?php
     
    // declaration des variables
     
    $fichier_ent='C:\wamp\www\progs_infos_autos\fic_ent.txt'; // chemin fichier en entree
    $fichier_sor='C:\wamp\www\progs_infos_autos\fic_sor.txt'; // chemin fichier en sortie 
    $i=0; // boucle de comptage 1
    $i2=0; // boucle de comptage 2
    $nbline=0; // nombre de ligne du fichier 1
    $nbline2=0; // nombre de ligne du fichier 2
    $tableau= array(); // tableau de stoakage 1
    $tableau2 =array(); // tableau de stoakage 2
     
    if (file_exists($fichier_ent))  // controle de existence du fichier en entree
    {
    	$fe=fopen($fichier_ent, 'r');
    	while (!feof($fe)) // comptage du nombre de ligne jusqu a la fin
      {
    		$nbline = trim(fgets($fe));
    		$nbline2++;
    	}
    }
     
    echo $nbline2;  // retourne le nombre de ligne du fichier
     
    $fichier_e = file($fichier_ent); // on affecte le fichier dans une variable ????????????????????
     
    for($i = 1; $i <= $nbline2; $i++) 
    { 
      explode(":",$fichier_e) //
     
      $tableau[i][1]= array($i,,) // affectation du numero de comptage i dans la colonne 1 du tableau  
     
      $tableau[i][2] = array(,$fichier_e[1],); // On copie la valeur d avant le separateur de la ligne i du fichier dans le colonne 2 de la ligne i du tableau
      // avant le separateur dans la colonne 1
      $tableau[i][3] = array(,,$fichier_e[2]); // On copie la valeur d avant le separateur de la ligne i du fichier dans le colonne 3 de la ligne i du tableau
      // apres le separateur dans la colonne 2
      echo $tableau[i][1][2]; // affichageage des lignes
    } 
     
    fseek($fs,0);  // preparation a l affectation dans le fichier de sortie
     
    $fichier_s = file($fichier_sor); // on affecte le fichier dans une variable ????????????????????
     
    for($i = 1; $i <= $nbline2; $i++) 
    {
     
    $chaine=$tableau[i][1]..";".$tableau[i][2].";;;;;;;;;;;;;;;;;;;;;;;;;;;;;".$tableau[i][3].";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n" ;  // concatenation du numero de comptage avec les donnees du fichier en entree et des chaine de caracteres
    fputs($fs,$chaine); // fonction d affectation dans le fichier
     
    }
     
    fclose($fe);  // fermeture du fichier en entree
    fclose($fs);  // fermeture du fichier en sortie
     
    ?>

    Exemple de fichier d'entrée :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    micheldupont@toto.fr:pseudomicheldupont
    eric@email.be:pseudoericmachin
    nadinemichou@mail.fr:pseudotrucbidule

    Exemple de fichier en sortie :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1;micheldupont@toto.fr;;;pseudomicheldupont;;;
    2;eric@email.be;;;pseudoericmachin;;;
    3;nadinemichou@mail.fr;;;pseudotrucbidule;;;

    Merci de m'aiguiller

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 15
    Points : 35
    Points
    35
    Par défaut
    Désolé je ne me suis pas bien expliqué. Je faisais allusion à la ligne fputs ($fichier_sor, $chaine); le premier argument de fputs doit être une "ressource" retournée par fopen, mais le fichier de sortie n'a jamais été ouvert dans le code. De même pour fclose.

    Tu as certes ouvert le fichier d'entrée à l'intérieur du bloc if, mais la variable $fp n'a pas été utilisée dans fclose du fichier d'entrée : fclose ($fichier_ent);

    Voici comment la famille des fonctions fopen-fread-fwrite-fclose s'utilise normalement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $fp = fopen('fichier.txt', 'r');
    $ligne = fgets($fp);
    var_dump($ligne);
    fclose($fp);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $fichier = '/chemin/vers/le/fichier.txt';
    $fp = fopen($fichier, 'w'); //'w' pour écraser le contenu actuel du fichier, 'a' pour y ajouter des informations
    fwrite($fp, 'données');
    fclose($fp);
    En plus de file(), tu peux également utiliser la fonction file_get_contents('/chemin/vers/le/fichier.txt') pour lire le contenu d'un fichier d'un seul coup, file_put_contents('/chemin/vers/le/fichier.txt', $donnees) pour remplacer le contenu du fichier par $donnees ou encore file_put_contents('/chemin/vers/le/fichier.txt', $donnees, FILE_APPEND) ajouter $donnees au fichier.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut copy ligne par ligne
    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
     
     
    <?php
     
    $in = fopen('in.txt', 'r');
    $out = fopen('out.txt', 'a+'); 
     
    $l_number = 0;
    if ($in)
    {
     
    	while (!feof($in))
    	{
     
    	$buffer = fgets($in);
            $l_number++; 
            $data_in = explode(':', $buffer);
            $data_out = $l_number.';'.trim($data_in[0]).';;;;;'.trim($data_in[0]).';;;;;'."\r\n";
     
            fputs($out, $data_out);
     
    	}
     
    	fclose($in); 
            fclose($out);    
     
    }
    ?>
    Conception / Dev

  7. #7
    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 604
    Points
    4 604
    Par défaut
    Bonsoir

    Citation Envoyé par Hassan. Voir le message
    Désolé je ne me suis pas bien expliqué. Je faisais allusion à la ligne fputs ($fichier_sor, $chaine); le premier argument de fputs doit être une "ressource" retournée par fopen, mais le fichier de sortie n'a jamais été ouvert dans le code. De même pour fclose.

    Tu as certes ouvert le fichier d'entrée à l'intérieur du bloc if, mais la variable $fp n'a pas été utilisée dans fclose du fichier d'entrée : fclose ($fichier_ent);

    Voici comment la famille des fonctions fopen-fread-fwrite-fclose s'utilise normalement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $fp = fopen('fichier.txt', 'r');
    $ligne = fgets($fp);
    var_dump($ligne);
    fclose($fp);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $fichier = '/chemin/vers/le/fichier.txt';
    $fp = fopen($fichier, 'w'); //'w' pour écraser le contenu actuel du fichier, 'a' pour y ajouter des informations
    fwrite($fp, 'données');
    fclose($fp);
    En plus de file(), tu peux également utiliser la fonction file_get_contents('/chemin/vers/le/fichier.txt') pour lire le contenu d'un fichier d'un seul coup, file_put_contents('/chemin/vers/le/fichier.txt', $donnees) pour remplacer le contenu du fichier par $donnees ou encore file_put_contents('/chemin/vers/le/fichier.txt', $donnees, FILE_APPEND) ajouter $donnees au fichier.
    Je prend bonne note de la fonction pour la lecture , l'ouverture et l'ecriture dans un fichier.

    Citation Envoyé par ascito Voir le message
    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
     
     
    <?php
     
    $in = fopen('in.txt', 'r');
    $out = fopen('out.txt', 'a+'); 
     
    $l_number = 0;
    if ($in)
    {
     
    	while (!feof($in))
    	{
     
    	$buffer = fgets($in);
            $l_number++; 
            $data_in = explode(':', $buffer);
            $data_out = $l_number.';'.trim($data_in[0]).';;;;;'.trim($data_in[0]).';;;;;'."\r\n";
     
            fputs($out, $data_out);
     
    	}
     
    	fclose($in); 
            fclose($out);    
     
    }
    ?>
    Je viens de tester le programme , amha mia , il fonctionne .

    Tu es un champion astico

    Merci d'avance

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

Discussions similaires

  1. Affectation numéro via VBA
    Par chacha21 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/01/2013, 19h45
  2. Affecter un numéro de ticket
    Par darKStein dans le forum Développement
    Réponses: 4
    Dernier message: 09/06/2011, 14h44
  3. récuperation d'un numéro de téléphone
    Par herzleid dans le forum Delphi
    Réponses: 4
    Dernier message: 17/07/2007, 10h25
  4. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 22h29
  5. [MaskEditBox] Affecter avec un réel
    Par fikou dans le forum Général VBA
    Réponses: 6
    Dernier message: 16/09/2002, 10h28

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