Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 09/10/2011, 04h29   #1
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Par défaut Modification de fichier txt

Bonjour,

Je voudrais modifier un fichier txt, qui a comme contenu:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
 
$fr['1']['1']['3'] = 'Ligne1';
$fr['1']['1']['3'] = 'Ligne2';
$fr['1']['1']['3'] = 'Ligne3';
$fr['1']['2']['6'] = 'Ligne4';
$fr['1']['2']['6'] = 'Ligne5';
$fr['1']['2']['6'] = 'Ligne6';
$fr['1']['2']['6'] = 'Ligne7';
$fr['1']['2']['6'] = 'Ligne8';
$fr['1']['2']['6'] = 'Ligne9';
$fr['1']['3']['1'] = 'Ligne10';
comment puis je les changer par:

Code :
1
2
3
4
5
6
7
8
9
10
INSERT INTO TABLE nomTable VALUES ('Ligne1');
INSERT INTO TABLE nomTable VALUES ('Ligne2');
INSERT INTO TABLE nomTable VALUES ('Ligne3');
INSERT INTO TABLE nomTable VALUES ('Ligne4');
INSERT INTO TABLE nomTable VALUES ('Ligne5');
INSERT INTO TABLE nomTable VALUES ('Ligne6');
INSERT INTO TABLE nomTable VALUES ('Ligne7');
INSERT INTO TABLE nomTable VALUES ('Ligne8');
INSERT INTO TABLE nomTable VALUES ('Ligne9');
INSERT INTO TABLE nomTable VALUES ('Ligne10');
Merci a vous
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2011, 06h36   #2
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Je te le fais parce que ce serait plus long à expliquer
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$array = file('fichier.txt',FILE_IGNORE_NEW_LINES);
 
$tab = array();
 
foreach ($array as $value)
{
	$tab_split = explode(' = ',$value);
	if(isset($tab_split[1])) $tab[] = 'INSERT INTO TABLE nomTable VALUES ('.rtrim($tab_split[1],';').');'."\n";
}
 
file_put_contents('fichier2.txt',$tab);
?>
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2011, 07h48   #3
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
difficil a comprendre, le resultat obtenu:

Citation:
INSERT INTO TABLE nomTable VALUES ('Ligne1'; );INSERT INTO TABLE nomTable VALUES ('Ligne2'; );
j'ai fait un espace entre ; et ) pour ne pas avoir l'icone clin d'oeil

le resultat souhaitable est:

Citation:
INSERT INTO TABLE nomTable VALUES ('Ligne1');
INSERT INTO TABLE nomTable VALUES ('Ligne2');
sans le ; dans les VALUES et un retour a la ligne a la fin de chaque INSERT
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2011, 19h35   #4
Membre confirmé
 
Avatar de bourvil
 
Inscription : juin 2002
Messages : 351
Détails du profil
Informations personnelles :
Localisation : Israël

Informations forums :
Inscription : juin 2002
Messages : 351
Points : 217
Points : 217
le code marche bien pour moi aussi
__________________
Franchement, je suis capable du meilleur comme du pire, mais, dans le pire, c'est moi le meilleur.
Coluche
bourvil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2011, 20h13   #5
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Bon l'explication :

L'emploi de "file" est pour récupérer le résultat du fichier texte dans un tableau.

L'emploi de "FILE_IGNORE_NEW_LINES" est pour supprimer les symboles de retour ligne qui se trouvent à la fin de chaque ligne.

Donc ensuite on liste le tableau récupéré avec un foreach.

On fait un explode sur le " = " pour récupérer ce qui nous intéresse dans le deuxième élément du tableau résultant (cf fonction explode). Bon pour faire la même chose on pourrait utiliser une autre technique avec strrchr (cf doc) mais là n'est pas le problème.
A ce niveau là on devrait récupérer Pour supprimer le dernier ";" de cette expression je me sert de la fonction "rtrim", cf doc.
rtrim supprime le dernier caractère indiqué en paramètre uniquement si ce caractère se trouve en dernière position. C'est pour cette raison qu'au début du code j'ai utilisé FILE_IGNORE_NEW_LINES avec file pour supprimer les retour ligne, qui lors de la récupération sont le dernier caractère de chaque ligne. Une fois les retours lignes supprimés on devrait donc avoir ";" en dernière position et rtrim les supprime, tu me suis ?

Le reste est simplement la reconstruction de la chaine que tu souhaite en sortie avec à la fin un "\n" pour indiquer un retour ligne.

Je passe sur file_put_contents (cf doc).

Le problème est que si je recopie ton exemple de fichier texte et que je teste le code que je t'ai indiqué et bien ça fonctionne correctement chez moi.
Il m'est donc difficile de te dire d'où vient le problème... le fichier texte que tu utilises doit être différent au niveau des caractères cachés etc..

Cela dit pour supprimer le dernier ";" à la place d'utiliser rtrim tu peux utiliser des fonctions genre strstr (avec l'option TRUE). A toi de faire des essais car étant donné que je n'ai pas les mêmes résultats chez moi...

Contrôle par des affichages à chaque étape pour mieux comprendre et faits afficher les caractères cachés pour bien les visualiser dans tes fichiers.
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 10h13   #6
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Merci ABCIWEB

je veux juste supprimer le ; avant )
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 07h11   #7
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
peut on utiliser preg_replace??
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 09h36   #8
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
des remarques??

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
 
<?php
$array = file('1.php',FILE_IGNORE_NEW_LINES);
//$array = file('1.php');
//print_r($array);
 
$tab = array();
//print_r($tab);
 
foreach ($array as $key=>$value)
{
	//echo 'key: '.$key.'<br />';
	//echo 'val: '.$value.'<br />';
	$tab_split = explode(' = ',$value);
	//print_r($tab_split);
 
	//echo $tab_split[1].'<br>';
	$chaine = preg_replace('#^\'#','INSERT INTO tableName VALUES (\'', $tab_split[1]);
	//echo $chaine.'<br />';
	$new_chaine = preg_replace('#\';#','\');', $chaine);
	echo $new_chaine.'<br />';
	//if(isset($tab_split[1])) $tab[] = 'INSERT INTO TABLE nomTable VALUES ('.rtrim($tab_split[1],';').');'."\n";
}
?>
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 09h39   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
il sort d’où ton fichier txt a la base ?
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 08h51   #10
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Citation:
Envoyé par stealth35 Voir le message
il sort d’où ton fichier txt a la base ?
c'est un fichier cree ayant des lignes, une ligne apres l'autre, qui est en local
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 10h08   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
Citation:
Envoyé par isitien Voir le message
c'est un fichier cree ayant des lignes, une ligne apres l'autre, qui est en local
t'as la main dessus ?
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 14h41   #12
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Citation:
Envoyé par stealth35 Voir le message
t'as la main dessus ?
oui exactement
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h45.


 
 
 
 
Partenaires

Hébergement Web