Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/05/2011, 16h48   #1
Nouveau Membre du Club
 
Avatar de charlene44
 
Étudiant
Inscription : juin 2006
Messages : 87
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2006
Messages : 87
Points : 37
Points : 37
Envoyer un message via MSN à charlene44
Par défaut Rechercher nombre d'occurences d'une chaine dans plusieurs fichiers

Bonjour,

Depuis quelques jours je réfléchi à un petit problème que j'ai au niveau de mon projet PHP et je suis à court d'idées, donc si pour vous ca fait tilt! n'hésitez pas à me faire part de vos idées.

En résumé, j'ai un projet composé de fichiers .php, des templates .tpl, et du JS. en paralelle de ces fichiers j'ai un fichier xml pour stocker mes ressources (traductions) composés d'un identifiant et d'une valeur ou plusieurs valeurs.

J'ai besoin de réaliser une étude pour savoir combien quelle proportion de ces ressources XML sont le plus utilisées dans le projet, en gros de compter le nombre d'appels pour chaque ressource.

J'ai sorti la liste d'identifiants de mon fichier XML dans un fichier Excel.

Mon problème étant que je ne vois absolument pas comment parcourir mes fichiers et compter le nombre de fois ou le système trouve cet identifiant dans les fichiers. Je peux le faire à la main en ouvrant tous les fichiers avec notepad++ en les recherchant 1 par 1 mais j'ai 1400 ressources ca risque d'être un peu long.

Auriez-vous une idée pour parcourir des fichiers, compter le nombre d'occurence d'une chaine, l'inscrire quelque part et recommencer le processus pour chaque identifiant et ce de façon automatique?

Cela peut très bien ne pas être en PHP, je suis ouverte à toute suggestion. j'avais pensé à un script mais je n'en ai jamais fait je ne sais même pas si cela est possible.

Merci
charlene44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 14h38   #2
Membre expérimenté
 
Avatar de doudouallemand
 
Inscription : août 2005
Messages : 1 108
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : août 2005
Messages : 1 108
Points : 597
Points : 597
Bonjour,

Cela doit pouvoir se faire simplement en suivant la logiciel suivante :
Code :
1
2
3
4
5
6
7
8
9
 
Ouvrir ton répertoire racine (opendir)
Pour chaque identifiant
     compteur = 0
     Parcourir tous les répertoires et sous-répertoires de la racine (fonction récursive qui reçoit en paramètre ton compteur et identifiant et te renvoi le compteur incrémenter)
             Pour chaque fichier trouver, l'ouvrir et récupérer le texte dans une variable (fread)
                    Rechercher toutes les occurences de ton identifiant dans cette variable
            Fin Pour
Fin Pour
Voilà, après, tu peux coder ceux-ci dans n'importe quel langage, php, C#, c++, java, ...

doudouallemand
__________________
développeur en folie cherche à ... développer encore plus
doudouallemand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 14h49   #3
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 71
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 71
Points : 27
Points : 27
Bonjour,

Considérons que ton fichier xml est de cette forme :

Citation:
liste_identifiants.xml
<ressouce1>
<identifiant>toto</identifiant>
<valeur>12</valeur>
</ressouce1>

<ressouce2>
<identifiant>titi</identifiant>
<valeur>9</valeur>
</ressouce2>

<ressouce3>
<identifiant>tutu</identifiant>
<valeur>16</valeur>
</ressouce3>
L'algo + les fonctions que j'utiliserais :

_ charges ton fichier xml (reportes toi à la librairie DomDocument) et récupères tes identifiants dans un tableau.
Code :
1
2
3
$doc = new DomDocument()
$doc->LoadFile("liste_identifiants.xml");
$tabIdentifiants = $doc->getElementsByTagName("identifiant");
_ parcours les fichiers (php, tpl, js) de ton répertoire avec opendir, readdir et closedir

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
//Voici un exemple de code utilisant ces fonctions et trouvé ici http://php.net/manual/fr/function.opendir.php
<?php
$dir = "*.*";
 
// Ouvre un dossier bien connu, et liste tous les fichiers
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            echo "fichier : $file : type : " . filetype($dir . $file) . "\n";
        }
        closedir($dh);
    }
}
?>

_ charges dans une chaine le contenu du fichier actuellement parcouru avec file_get_contents()
Code :
$contenuFichier = file_get_contents($file);
_ parcours tes identifiants (donc ton tableau $tabIdentifiants)

_ comptes le nombre d'occurrences dans ton fichier de l'identifiant parcouru avec substr_count()
Code :
$nbOccurences = substr_count($contenuFichier , $identifiant);
_ stockes le nombre d'occurences trouvé dans un tableau multidimensionnel
Code :
$tabOccurences[$identifiant] = $tabOccurences[$identifiant]+$nbOccurences;
_ Et enfin, écris ton tableau multidimensionnel dans un fichier de statistiques
arsene555 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 14h10   #4
Nouveau Membre du Club
 
Avatar de charlene44
 
Étudiant
Inscription : juin 2006
Messages : 87
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2006
Messages : 87
Points : 37
Points : 37
Envoyer un message via MSN à charlene44
merci beaucoup pour votre aide.
charlene44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h48.


 
 
 
 
Partenaires

Hébergement Web