Bonjour
je ne suis pas très calé en programmation et je bute sur un problème qui me semble être d'une
simplicité extrème mais je ne trouve pas :
l'idée est la suivante
je scrute un fichier comprenant des lignes
chaque ligne est composée de mots séparés par des espaces, le nombre de mots par ligne est variable
je voudrais pour chaque ligne récupérer la première lettre de chaque mot et concatener celles-ci
comment j'ai procédé
une première boucle se charge
de récupérer la phrase
puis de faire un explode de celle-ci
puis de compter le nombre d'éléments contenu dans le tableau obtenu
une seconde boucle (a l'intérieur de la première) est censée
récupérer la première lettre de chaque éléments du tableau obtenu par l'explode
mais au lieu d'afficher toutes les lettres concaténées je n'ai que la dernière, je comprend bien
pourquoi, mais je n'arrive pas à y remédier
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
newdb
Pascal wrote:
je scrute un fichier comprenant des lignes chaque ligne est composée de mots séparés par des espaces, le nombre de mots par ligne est variable je voudrais pour chaque ligne récupérer la première lettre de chaque mot et concatener celles-ci
<?php
// pour les lettres accentuées setlocale(LC_ALL, 'fr_FR');
// récupère le tableau des mots // puis concatène la première lettre function concatFirstLetter($ligne) { $retour = ''; $les_mots = str_word_count($ligne, 2); foreach ($les_mots as $le_mot) { $retour .= $le_mot{0}; } return $retour; }
-- @@@@@ E -00 comme on est very beaux dis ! ' `) / |_ =="
Pascal <Pascal.xxx@xxx.fr> wrote:
je scrute un fichier comprenant des lignes
chaque ligne est composée de mots séparés par des espaces,
le nombre de mots par ligne est variable
je voudrais pour chaque ligne récupérer la première lettre
de chaque mot et concatener celles-ci
<?php
// pour les lettres accentuées
setlocale(LC_ALL, 'fr_FR');
// récupère le tableau des mots
// puis concatène la première lettre
function concatFirstLetter($ligne) {
$retour = '';
$les_mots = str_word_count($ligne, 2);
foreach ($les_mots as $le_mot) {
$retour .= $le_mot{0};
}
return $retour;
}
je scrute un fichier comprenant des lignes chaque ligne est composée de mots séparés par des espaces, le nombre de mots par ligne est variable je voudrais pour chaque ligne récupérer la première lettre de chaque mot et concatener celles-ci
<?php
// pour les lettres accentuées setlocale(LC_ALL, 'fr_FR');
// récupère le tableau des mots // puis concatène la première lettre function concatFirstLetter($ligne) { $retour = ''; $les_mots = str_word_count($ligne, 2); foreach ($les_mots as $le_mot) { $retour .= $le_mot{0}; } return $retour; }
-- @@@@@ E -00 comme on est very beaux dis ! ' `) / |_ =="
Olivier Miakinen
je scrute un fichier comprenant des lignes chaque ligne est composée de mots séparés par des espaces, le nombre de mots par ligne est variable
je voudrais pour chaque ligne récupérer la première lettre de chaque mot et concatener celles-ci
Tu peux le faire ligne par ligne : $initiales_d_une_ligne = preg_replace("/([^ ])[^ ]* */", "$1", $ligne);
Mais tu peux aussi traiter tout le fichier (avec des n) en une seule passe : $initiales = preg_replace("/([^ n])[^ n]* */", "$1", $fichier);
Explications :
"([^ n])" Un caractère qui n'est ni une espace ni une fin de ligne, le premier de la série, est capturé par les parenthèses pour devenir la référence $1. "[^ n]*" Tous les caractères suivants (sans espace ni fin de ligne) sont passés et ignorés. " *" Toutes les espaces qui suivent sont passées et ignorées.
"$1" Contient l'initiale capturée.
je scrute un fichier comprenant des lignes
chaque ligne est composée de mots séparés par des espaces, le nombre de mots par ligne est variable
je voudrais pour chaque ligne récupérer la première lettre de chaque mot et concatener celles-ci
Tu peux le faire ligne par ligne :
$initiales_d_une_ligne = preg_replace("/([^ ])[^ ]* */", "$1", $ligne);
Mais tu peux aussi traiter tout le fichier (avec des n) en une seule
passe :
$initiales = preg_replace("/([^ n])[^ n]* */", "$1", $fichier);
Explications :
"([^ n])"
Un caractère qui n'est ni une espace ni une fin de ligne, le
premier de la série, est capturé par les parenthèses pour devenir
la référence $1.
"[^ n]*"
Tous les caractères suivants (sans espace ni fin de ligne) sont
passés et ignorés.
" *"
Toutes les espaces qui suivent sont passées et ignorées.
je scrute un fichier comprenant des lignes chaque ligne est composée de mots séparés par des espaces, le nombre de mots par ligne est variable
je voudrais pour chaque ligne récupérer la première lettre de chaque mot et concatener celles-ci
Tu peux le faire ligne par ligne : $initiales_d_une_ligne = preg_replace("/([^ ])[^ ]* */", "$1", $ligne);
Mais tu peux aussi traiter tout le fichier (avec des n) en une seule passe : $initiales = preg_replace("/([^ n])[^ n]* */", "$1", $fichier);
Explications :
"([^ n])" Un caractère qui n'est ni une espace ni une fin de ligne, le premier de la série, est capturé par les parenthèses pour devenir la référence $1. "[^ n]*" Tous les caractères suivants (sans espace ni fin de ligne) sont passés et ignorés. " *" Toutes les espaces qui suivent sont passées et ignorées.
On est d'accord que je ne "critique" pas ta proposition, mais y a t il une raison pour laquelle l'utilisation des expressions ait-été "exclu"? On avait le charactere délimiteur de champ (espace), et on voulait la premiere lettre de chaque champ.
On est d'accord que je ne "critique" pas ta proposition, mais y a t il une
raison pour laquelle l'utilisation des expressions ait-été "exclu"?
On avait le charactere délimiteur de champ (espace), et on voulait la
premiere lettre de chaque champ.
On est d'accord que je ne "critique" pas ta proposition, mais y a t il une raison pour laquelle l'utilisation des expressions ait-été "exclu"? On avait le charactere délimiteur de champ (espace), et on voulait la premiere lettre de chaque champ.
newdb
Mihamina (R12y) Rakotomandimby wrote:
denisb - <1hw5krr.c12bjd1nb4p96N% :
function concatFirstLetter($ligne) { On est d'accord que je ne "critique" pas ta proposition, mais y a t il une
raison pour laquelle l'utilisation des expressions ait-été "exclu"?
mmhh... non non. il n'y a pas de raison particulière. piqué de curiosité, j'ai fait quelques tests...
1) sur la vitesse de traitement :
sur un fichier test de 17943 lignes. ici : <http://www.circaete.net/test_php/fichier_test.txt> (1 182 985 octets)
sur un de mes serveurs avec les preg, je tourne entre 0,7 et 0,8 secondes pour le traitement. avec str_word_count, je tourne entre 0,8 et 1,1 secondes.
sur un autre serveur, par contre, avec les preg, je tourne entre 0,55 et 0,56 secondes et avec str_word_count, entre 0,43 et 0,45 secondes... (sans doute une question de configuration serveur/version php)
2) sur la qualité des sorties :
il faut modifier la regexp pour qu'elle ne prenne en compte que les lettres (y compris accentuées) et pas les ponctuations ou autres.
par exemple les lignes du fichier de test : 01: 13011966 02: (R)OM - Gheorghe Gheorghiu (1991, nb) Bernard Sobel pendant les répétitions de «Le seigneur Guan va au banquet». CDN de Gennevilliers. 03: ¿ hauteur d'homme 04: «A.K.A» en concert
function concatFirstLetter($ligne) {
On est d'accord que je ne "critique" pas ta proposition, mais y a t il une
raison pour laquelle l'utilisation des expressions ait-été "exclu"?
mmhh...
non non. il n'y a pas de raison particulière.
piqué de curiosité, j'ai fait quelques tests...
1) sur la vitesse de traitement :
sur un fichier test de 17943 lignes.
ici : <http://www.circaete.net/test_php/fichier_test.txt>
(1 182 985 octets)
sur un de mes serveurs
avec les preg, je tourne entre 0,7 et 0,8 secondes pour le traitement.
avec str_word_count, je tourne entre 0,8 et 1,1 secondes.
sur un autre serveur, par contre,
avec les preg, je tourne entre 0,55 et 0,56 secondes
et avec str_word_count, entre 0,43 et 0,45 secondes...
(sans doute une question de configuration serveur/version php)
2) sur la qualité des sorties :
il faut modifier la regexp pour qu'elle ne prenne en compte que
les lettres (y compris accentuées) et pas les ponctuations ou autres.
par exemple les lignes du fichier de test :
01: 13011966
02: (R)OM - Gheorghe Gheorghiu (1991, nb) Bernard Sobel pendant
les répétitions de «Le seigneur Guan va au banquet». CDN
de Gennevilliers.
03: ¿ hauteur d'homme
04: «A.K.A» en concert
function concatFirstLetter($ligne) { On est d'accord que je ne "critique" pas ta proposition, mais y a t il une
raison pour laquelle l'utilisation des expressions ait-été "exclu"?
mmhh... non non. il n'y a pas de raison particulière. piqué de curiosité, j'ai fait quelques tests...
1) sur la vitesse de traitement :
sur un fichier test de 17943 lignes. ici : <http://www.circaete.net/test_php/fichier_test.txt> (1 182 985 octets)
sur un de mes serveurs avec les preg, je tourne entre 0,7 et 0,8 secondes pour le traitement. avec str_word_count, je tourne entre 0,8 et 1,1 secondes.
sur un autre serveur, par contre, avec les preg, je tourne entre 0,55 et 0,56 secondes et avec str_word_count, entre 0,43 et 0,45 secondes... (sans doute une question de configuration serveur/version php)
2) sur la qualité des sorties :
il faut modifier la regexp pour qu'elle ne prenne en compte que les lettres (y compris accentuées) et pas les ponctuations ou autres.
par exemple les lignes du fichier de test : 01: 13011966 02: (R)OM - Gheorghe Gheorghiu (1991, nb) Bernard Sobel pendant les répétitions de «Le seigneur Guan va au banquet». CDN de Gennevilliers. 03: ¿ hauteur d'homme 04: «A.K.A» en concert