Page 1 sur 3
Classer les éléments d'un fichier texte
Posté : 12 juil. 2005, 11:28
par speddy1406
J'ai ce programme qui insère les valeurs d'un fichier texte dans un autre fichier texte :
//Ouverture du fichier 1
$fichier1="assimile_5h.txt";
$o_file = fopen($fichier1, "a");
//Ouverture du fichier 2
$fichier2="assimile_03.txt";
$a_fichier2 = file($fichier2);
//On parcours chaque ligne du fichier 2
foreach($a_fichier2 as $ligne) {
//Ecriture de cette ligne dans le fichier texte
fputs($o_file, $ligne);
}
fclose($o_file);
et je souhaiterai au moment où il me met les valeurs du fichier2 dans fichier1 qu'il me les classe par odre croissant. Plus clairement qu'il m'insère les nouvelles valeurs au bon endroit dans le fichier1.
Pour le moment les valeurs du fichiers2 sont mises à la fin du fichier1
J'ai trouvé des fonctions permettant de trier array_multisort avec l'option sortasc ; mais je vois pas trop comment les utiliser.
Merci
Posté : 12 juil. 2005, 11:43
par zeus
C'est selon quels critères que tu veux les trier ?
Je me rapelle de la syntaxe de tes fichiers mais ce n'est pas le cas de tout le monde
Je pense qu'un exemple de fichier avant et après tri pourrait nous aider à t'aider (pas mal la phrase 8) )
Posté : 12 juil. 2005, 13:24
par speddy1406
ok.
voici le fichier avec les valeurs mises à la fin du fichier :
-1.45 49 63.6
1.6 49 62.4
1.75 49 58.7
1.9 49 46.9
2.05 49 35.2
2.2 49 31.3
2.35 49 27.5
2.5 49 35.7
2.65 49 40.5
2.8 49 46.1
2.95 49 48.9
3.1 49 54
3.25 49 60.3
3.4 49 65.5
3.55 49 68.1
que les valeurs qui se trouvaient à la fin soient insérer dans le fichier dans l'ordre de croissant par rapport à la seconde colonne puis par rapport à la première.
En espérant que cela soit plus clair
Posté : 12 juil. 2005, 13:32
par fggdm
Salut,
Pourquoi c'est pas en base de données ?
Si tu tiens à faire le traitement en PHP, va falloir travailler avec des tableaux pour trier et comparer.
Posté : 12 juil. 2005, 13:33
par zeus
Quand je disais exemple, je pensais à quelques lignes

Si tu pouvais éditer ton post, merci
Sinon,
soit fic_dest ton fichier de destination (celui qui doit être trié)
soit fic_dep celui qui contient les données à ajouter à fic_dest
il faut que tu extraye le contenu de fic_dest (avec file)
tu extrait le contenu de fic_dep que tu ajoute dans le tableau qui contient le contenu de fic_dest
tu trie ce tableau avec
array_multisort()
Et enfin, tu met le contenu de ce tableau trier dans fic_dest en ayant préalablement supprimé le contenu (fopen("fic_dest", "w"))
Bon courage pour le codage
Je devrais être dans le coin cet aprèm
Posté : 12 juil. 2005, 13:35
par fggdm
Juste une petite chose "de rien du tout", tu utilises deux séparateurs différents, le point et la virgule !
Posté : 12 juil. 2005, 13:59
par Cyrano
Modération : speeddy1406, merci d'éditer ton post avec les données et en couper les trois quarts, merci. C'est du remplissage inutile: crois-tu vraiment qu'on va s'amuser à lire chaque ligne ?
Posté : 12 juil. 2005, 14:23
par speddy1406
c'est bon j'ai édité mon post.
excusez moi.
Posté : 12 juil. 2005, 14:26
par speddy1406
voila ce que j'ai codé mais il me met une erreur sur la ligne du tri :
//Ouverture du fichier 1
$fichier1="assimile_5h.txt";
$o_file = fopen($fichier1, "a");
//Ouverture du fichier 2
$fichier2="assimile_03.txt";
$a_fichier2 = file($fichier2);
//On parcours chaque ligne du fichier 2
foreach($a_fichier2 as $ligne) {
//Ecriture de cette ligne dans le fichier texte
fputs($o_file, $ligne);
}
fclose($o_file)
array_multisort($o_file, SORT_ASC);
fputs($o_file, array_multisort);
je pense que j'extrais bien les données des deux fichiers, puis je les données se mettent dans le fichier1.
mais pour le tri, je pense que je n'utilise pas la fonction comme il faut.
Peut m'expliquer comment cette fonction fonctionne.
Merci
Posté : 12 juil. 2005, 14:28
par zeus
soit fic_dest ton fichier de destination (celui qui doit être trié)
soit fic_dep celui qui contient les données à ajouter à fic_dest
il faut que tu extraye le contenu de fic_dest (avec file)
tu extrait le contenu de fic_dep que
tu ajoute dans le tableau qui contient le contenu de fic_dest
tu
trie ce tableau avec
array_multisort()
Et enfin, tu met le contenu de ce
tableau trier dans fic_dest en ayant préalablement supprimé le contenu (fopen("fic_dest", "w"))
Si tu lit bien ce que j'ai mis en gras, tu doit comprendre ton erreur
C'est pas pour t'embeter mais après t'avoir aider plusieurs fois, j'aimerais que tu essaye de coder par toi même
Posté : 12 juil. 2005, 14:56
par speddy1406
Si je reprend étape par étape :
fputs($o_file, $ligne);
Cette ligne me copie bien les données du fichier2 dans fichier1.
Mais pour trier le contenu de ce tableau avec la fonction arraymultisort
est ce je peux écrire cela
$trier=fputs($o_file, $ligne);
array_multisort($trier);
et ensuite
fopen($trier,"w");
Est ce que çà pourrait être correct ?
Posté : 12 juil. 2005, 14:59
par zeus
prend l'habitude d'aller consulter un manuel php du style
php.net
fopen sert à ouvrir un fichier, pas à extraire son contenu
file rempli cette fonction
Posté : 12 juil. 2005, 15:20
par speddy1406
oui excuse moi j'avais modifié dans le test que j'ai fait et je t'ai mis la mauvaise ligne donc je reprend
$fichier_trie = file($trier);
et ensuite faire
fputs($trier);
fclose ($trier);
est ce que comme çà c'est mieux où pas ?
Posté : 12 juil. 2005, 15:32
par zeus
dans l'idée, t'es pas loin
$a_fichier1 = file("fichier1");
$a_fichier2 = file("fichier2");
$a_fichier_merge = array_merge($a_fichier1, $a_fichier2);
//trie selon les valeurs numériques dans l'ordre décroissant
$a_fichier_trie = array_multisort($a_fichier_merge, SORT_NUMERIC, SORT_DESC)
$fic_desc = fopen("fichier2", "w");
foreach($a_fichier_trie as $ligne) {
fputs($fic_dest, $ligne);
}
fclose($fic_dest);
devrait suffire.
Posté : 12 juil. 2005, 16:25
par speddy1406
ok.
j'ai modifié tin code par rapport à mes fichiers et voila ce que çà donne :
$a_fichier1 = file("assimile_5h.txt");
$a_fichier2 = file("assimile_03.txt");
$a_fichier_merge = array_merge($a_fichier1, $a_fichier2);
//trie selon les valeurs numériques dans l'ordre décroissant
$a_fichier_trie = array_multisort($a_fichier_merge, SORT_NUMERIC, SORT_ASC)
$fic_desc = fopen("assimile_5h.txt","w");
foreach($a_fichier_trie as $ligne) {
fputs($fic_desc, $ligne);
}
fclose($fic_desc);
mais malgre tout il me met une parse error sur cette ligne :
$fic_desc = fopen("assimile_5h.txt","w");
çà fait un petit moment que je cherche et fais d'autres tests et pas de solutions... vois-tu où il y a l'erreur ?