Numéroter les lignes avec PHP

Fermé
Utilisateur anonyme - 26 juil. 2010 à 12:44
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 - 28 juil. 2010 à 13:27
Bonjour,

j'ai un fichier plat dans unix qui contient 8 champs séparés par ":" comme suit:

champ1 : champ2 : champ3 : champ4 : champ5 : champ6 :champ7 : champ8

01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 : 333436418

01 : 6407385 : CHU,17000,la rochelle: fournitures : ouvert : 28/01/2008 : 92 : 304914211

01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 : 743462400

le 3éme champ est composé lui meme de trois champs séparés par "," qui correspondent à: la collectivité locale, le code postal et la ville, respectivement.
et en fait je veux numéroter les collectivités locales mais avec le code PHP. c'est a dire donner à chak ligne un numeros mai il y a des lignes ou la collectivité est la meme (comme l'exemple plus haut) donc je dois lui affecté le meme numero; comment faire svp??? je veux avoir le resultat suivant:

01 : 6407385 :1: fournitures : ouvert : 28/01/2008 : 92 : 333436418

01 : 6407385 : 2: fournitures : ouvert : 28/01/2008 : 92 : 304914211

01 : 6407385 :1: fournitures : ouvert : 28/01/2008 : 92 : 743462400

2 réponses

Salut !

Voici quelques fonctions en PHP que tu auras besoin :

Les regex (preg_match, preg_replace, ...), implode() et explode(), array();

Par ligne, utilise implode() pour séparer tout les champs. Ce sera un tableau, dont le 3eme champ vaudra l'adresse.

Avec ca, modifie selon ta guise : soit encore implode(), soit tu remplaces par un numéro, t tu rajoutes l'adresse dans un tableau que tu auras créé.
Bref, tu as un tableau ($tab = rray()), et quan tu tombes sur une adresse, dans la liste, qui n'est pas répertoriée, tu l'ajoutes. Tu peux aussi rajouter le numéro.

Fonctions :
in_array, isset.
Pour parcourir un tableau, vois : foreach();

J'espère t'avoir aidé...
Bye ;)
0
Utilisateur anonyme
28 juil. 2010 à 12:51
Bonjour,

merci pour votre réponse. donc j'ai essayé avec implode mais le probleme c'est que implode demande les noms des champs exemple:
<?php

$array = array('champ1', 'champ2', 'champ3');
$comma_separated = implode(",", $array);

echo $comma_separated; // champ1,champ2,champ3

?>

alors que mon fichier est un fichier plat (txt) donc pas de noms de champs. quand je l'ouvre avec less ou vim , il afficher directement les lignes dont la 1éré est:
01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 : 333436418 .
en plus, cette fonction rassemble les éléments d'un tableau en une chaîne, et moi je n'ai pas de tableau!!! ou est ce que mon fichier plat est considéré comme un tableau?
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 704
28 juil. 2010 à 12:59
Bonjour,

Essaye avec un algorithme qui marche comme suit:

- tu marque 1 a la place du 3eme champs
- Tu enregistres le troisieme champs dans un tableau
- tu rentre dans une boucle tant que tu n'a pas fini l'affichage
- tu lit le troisieme champs suivant et le stock dans une variable
- si (la variable est deja dans le tableau)
- alors (on met le numero de la case du tableau + 1 a la place)
- sinon (on copie le troisieme champs dans le tableau a la suite, et on marque le numero de la case du tableau + 1)
- fin si
- fin boucle

edit: je met numero de la case du tableau + 1 car le tableau commence a la case 0

0
Utilisateur anonyme
28 juil. 2010 à 13:21
re, oui mais le problème qhand je mrque "1" comment le programme execute le champs 3 et non pas le 4 ou le 2?? car mes champs ne sont pas només!! donc si je suis ce que tu dis je fait:
$array = array('1');
$comma_separated = implode(",", $array);

echo $comma_separated; // 1
???
honnetement je ne comprend pas!!!! c'est la 1ere fois que j'utilise sqlite et la 1ere fois que j'utilise PHP sur linux!!
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 704
28 juil. 2010 à 13:26
Toute les info que tu as, sont dans un tableau.
Ce tableau contient autant de ligne (ici 3) que de resultat dans ta requete, et autant de colonne (ici 8) que de champs. Tu as des methode toute prete pour te deplacer a l'interieur. A toi de les tester, les bidouiller et d'integrer cette algorithme dedans pour que sa marche.
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 704
28 juil. 2010 à 13:27
0