Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
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 06/09/2007, 16h18   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 63
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 63
Points : 14
Points : 14
Par défaut Traitement des doublons

Bonjour,

Je développe un programme qui permet ,dans un répertoire, de modifier des fichiers.xml en les transformant en .txt dont le titre est une balise contenue dans le xml.

Je traite bien les fichiers mais il arrive que des fichiers XML contiennent la même balise constituant le nommage du fichier .txt

exemple :
contenu de 12345.xml
Code :
1
2
3
4
 
...
<Sujet>5-communes</Sujet>
...
contenu de 23456.xml
Code :
1
2
3
4
 
...
<Sujet>5-communes</Sujet>
...
J'aimerais récupérer les 2 fichiers , tester si ils se nomment de la même manière, pouvoir renommer le 2nd en 5-communes-1 dans notre cas.

J'ai essayé "file exists", mais ça ne remarque pas qu'il existe déjà ?!?
voici mon prog

Code :
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
 
<?php
 
// on ouvre le repertoire
$handle = opendir('.');
 
// on scrupte le repertoire
while(false !== ($file = readdir($handle))) {
    if($file != "." && $file != ".." && $file !="transxml.php") {
 
// on cree le chemin
$path = '.'.'/'.$file;
 
// on traite tous les fichiers xml
if (preg_match('~\T.xml$~',$file)) {
 
// on applique la transformation
x$sxml = simplexml_load_file($path);
$titre = utf8_decode($sxml->Proprietes->Sujet);
//echo utf8_decode($sxml->Contenu);
$texte = utf8_decode($sxml->Contenu);
 
$texte = str_replace('?',"'",$texte);
$texte = str_replace('\(','',$texte);
$bad = array ('\cST\s','\cTI\s','\cTX\s','\cSG\s','\$','\dSG\t','\dDS1,2\t','\dFS\t','\dSN\t','\dSI\t','\cCH\s');
$good = array ('','','',' ',' ','','','','','','');
$texte = str_replace ($bad,$good,$texte);
 
$titre = str_replace (' ','_',$titre);
 
// on cree le fichier destination avec les donnees du fichier source
$fp = fopen ('.' . DIRECTORY_SEPARATOR . $titre. '.txt','w');
fputs ($fp,$texte);
fclose ($fp); 
}
}
 
}
 
// on ferme le repertoire
closedir($handle); 
?>
Merci d'avance pour vos réponses , car je nage
astrolane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2007, 17h27   #2
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
Je suis étonné que file_exists ne marche pas, peux tu mettre le code avec le file_exists s'il te plait?
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2007, 17h37   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 63
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 63
Points : 14
Points : 14
voici la syntaxe que j'utilise ...je ne vois pas de toto à l'affichage !!

Code :
1
2
3
4
5
6
7
8
9
10
11
 
...
...
 
$fp = fopen ('.' . DIRECTORY_SEPARATOR . $titre. '.txt','w');
if (file_exists($fp)) {
echo "toto";
}
else
fputs ($fp,$texte);
fclose ($fp);
merci pour votre aide
astrolane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2007, 17h38   #4
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
file_exists() prend un nom de fichier en paramètre et pas une ressource sur un fichier ouvert.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2007, 18h11   #5
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 63
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 63
Points : 14
Points : 14
si je met :

if (file_exists($titre.'.txt')) {
echo "toto";
}

j'ai autant de "toto" que de fichiers, alors que je voudrais avoir un "toto"
quand il y a un doublon.

ou dois-je placer le if ?

merci d'avance
astrolane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2007, 18h38   #6
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 63
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 63
Points : 14
Points : 14
c bon, j'ai trouvé la bonne syntaxe , il faut metttre le if avant le fopen de cette manière :

Code :
1
2
3
4
5
6
7
8
 
if (file_exists($titre.'.txt')) {
$titre = "$titre-1";
}
 
$fp = fopen ('.' . DIRECTORY_SEPARATOR . $titre. '.txt','w');
fputs ($fp,$texte);
fclose ($fp);
@+ !!! et merci encore !
astrolane 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 14h44.


 
 
 
 
Partenaires

Hébergement Web