IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Modifier une ligne d'un fichier texte


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 62
    Points : 37
    Points
    37
    Par défaut Modifier une ligne d'un fichier texte
    Bonjour à tous et à toutes,

    Je vous parcourir un fichier text et modifier une line souhaité en ajoutant le symbole "#" au debut de la ligne en question. voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    echo" <html><body>";
    //ouverture du fichier
    $fd=fopen("../fichierConfig/oo.txt","r+");
    echo"<form method=post>
    		<select name=fich>";
    					while($c=fgetcsv($fd,0,"="))
    					{
    							echo"<option value=$c[0]>$c[0]</option>";
    					}
    		echo "</select>";
    		echo"<input type=hidden value=$c[0]><input type=submit value=Activer>";
    echo "</form>";
     
    if(isset($_POST['fich']))
    {
    $fa=fopen("../fichierConfig/oo.txt","w+");
    			while($b=fgetcsv($fa,0,"="))
    			{
    							if($_POST['fich']==$b[0])
    							{
    							fseek($fa,0);
    							fputs($fa,"#");
    							}
    			}
    }
    echo"</body></html>";
    En gros j'ouvre mon fichier puis je recupere toutes les lignes que je stock dans un select avec un boutton dans un formulaire, ensuite lorsque l'utisateur click sur le bouton activer alors le programme ouvre le fichier et cherche la ligne selectionnée puis met un "#" au debut de cette dernière,mais j'y arrive pas, mon programme supprime plutot tout le contenu de mon fichier.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton 0 dans ta fonction fseek() c'est le debut du fichier, pas le début de la ligne.

    Plus simplement tu pourrais utiliser une expression régulière pour modifier l'ensemble du fichier.
    Attention tu n'as pas mis de "value" dans tes balises option.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 62
    Points : 37
    Points
    37
    Par défaut
    Soyez un peu plus clair, je ne comprend pas. si vous pouvez mettré en code ce serait encore mieu!

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Je peux déjà t'expliquer la première phrase de Sabotage.
    Pas grave si tu comprends pas la suite.
    Tu es partie de la fonction fgetscsv, prends-donc la syntaxe des exemples du manuel PHP sur cette fonction.
    http://fr2.php.net/manual/fr/function.fgetcsv.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $row = 1;
    if (($handle = fopen("test.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $num = count($data);
            echo "<p> $num champs à la ligne $row: <br /></p>\n";
            $row++;
            for ($c=0; $c < $num; $c++) {
                echo $data[$c] . "<br />\n";
            }
        }
        fclose($handle);
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 62
    Points : 37
    Points
    37
    Par défaut
    Au faite je recherche à modifier une ligne dans mon fichier par exemple j'ai trois lignes dans mon fichier comme suit:
    france=pays
    amerique=pays
    chine=pays
    Donc si la valeur selectionnée dans mon select est amerique alors le programme met un "#" au debut de cette ligne et le contenu du fichier devient:
    france=pays
    #amerique=pays
    chine=pays

  6. #6
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Je te propose plutôt cette fonction :
    A partir de ton csv, elle te construit un select, sans le modifier.
    Mais tu lui passes en paramètre 2 la valeur sélectionnée, s'il y en a une, et elle te l'affiche comme tu veux...
    Ca te va ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function construitSelect($type,$selected=''){
    	$select='<select name="'.$type.'">'."\n";
    	$count = 1;
    	if (($handle = fopen("listes.csv", "r")) !== FALSE) {
    		while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
    			$num = count($row);
    			$count++;
    			for ($c=0; $c < $num; $c++) {
    				//$temp[0]=france par exemple et $temp[1]=pays
    				$temp=explode('=',$row[$c]);
    				if($temp[1]==$type){
    					//la ligne sélectionnée, s'il y en a une
    					if($selected==$temp[0]){
    						$select.='<option value="'.$temp[0].'" selected>'.$temp[0].'</option>'."\n";
    					}
    					//la ligne ordinaire
    					else{
    						$select.='<option value="'.$temp[0].'">'.$temp[0].'</option>'."\n";
    					}
    				}
    			}
     
    		}
    		$select.='</select>'."\n";
    		fclose($handle);
    		return $select;
    	}
     
    }
    //Voici comment tu la convoques :
    $unSelect=construitSelect('pays','france');
    echo $unSelect;
    //et bien sûr, tu peux alimenter d'autres selects via ton csv
    /*
    Rome=capitale
    Paris=capitale
    New York=capitale
     
    se convoquerait ainsi
    $unSelect=construitSelect('capitale',''); si tu présentes le select pour la première fois ou $unSelect=construitSelect('capitale','Rome'); s'il y a déjà une séleciton par défaut
     
    */
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 62
    Points : 37
    Points
    37
    Par défaut
    Au faite cela ne resoud pas mon probleme car les lignes que j'ai ecrite (france=pays,etc..) n'etaient que des exemples, en realité chaque ligne represente une configuration d'un serveur donnée avec plusieurs paramtres(serveur1={profil:...,adresse:...,......}) en plus c'est pas un fichier cvs mais un fichier txt. J'ai utilisé la fonction fgetcsv juste pour pouvoir recuperer le nom avant "=".
    Donc il faut imperativement que j'arrive à mettre le # au debut d'une configuration pour desactiver celle-ci. J'ai une autre page web qui genère ces configurations.
    Le gros soucis c'est lorsque je retrouve ma ligne, je doit placer le curseur au debut de cette dernière pour ajouter le #.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Comment veux-tu qu'on te reponde si tu ne nous donne pas le cas réel ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 62
    Points : 37
    Points
    37
    Par défaut
    Mon fichier txt contient plusieurs lignes comme suit:
    #nom_serveur1={Profile:rtmp,StreamName:...,host:...,application:....,userName:.....,Password:} 
    #nom_serveur2={Profile:rtmp,StreamName:...,host:...,application:....,userName:......,Password:} 
    #nom_serveur3={Profile:rtmp,StreamName:...,host:...,application:....,userName:.....,Password:} 
    #nom_serveur4={Profile:rtmp,StreamName:...,host:...,application:....,userName:......,Password:} 
    et chaque ligne represente la configuration d'un serveur donné, et le # avant une configuration signifie que la configuration est desactivée.
    Une seul configuration doit doit être activer.donc pour activer une configuration on supprime le # au début de la ligne concerné et pour le desactiver on ajoute le #.

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Une méthode très directe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $file = '../fichierConfig/oo.txt';
    file_put_contents($file, str_replace('#' . $serveur, '#' . $serveur,  file_get_contents($file));
    S'il y a un risque que le nom du serveur apparaisse ailleurs, on peut faire un remplacement plus précis.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 62
    Points : 37
    Points
    37
    Par défaut
    j'ai testé mais le problème est que tous les occurrences du nom du serveur sont egalement remplacer.

  12. #12
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 421
    Points
    10 421
    Par défaut
    Il y a bien des solutions mais avant d'aller plus loin il serait intéressant de savoir si ce format de fichier .txt est imposé. Sinon pour des notifications le standard est plutôt un format comme le xml, ou éventuellement le csv.

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Comme je t'ai dit hier, on peut faire plus précis avec une expression régulière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file_put_contents($file, preg_replace('`^' . $serveur . '`', '#' . $serveur, file_get_contents($file));
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 62
    Points : 37
    Points
    37
    Par défaut
    ABCIWEB,
    oui le format txt est imposé!

    Sabotage j'ai testé ça mais elle ne remplance plus rien!

Discussions similaires

  1. Modifier une ligne dans un fichier text
    Par takizem dans le forum Programmation système
    Réponses: 0
    Dernier message: 07/10/2013, 19h29
  2. modifier une ligne dans un fichier texte
    Par junkie1986 dans le forum Tcl/Tk
    Réponses: 6
    Dernier message: 09/04/2013, 15h17
  3. [vb.net]Modifier une ligne d'un fichier texte
    Par Ykaar dans le forum VB.NET
    Réponses: 5
    Dernier message: 27/11/2008, 17h00
  4. Modifier une ligne d'un fichier texte?
    Par ecarbill dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/05/2007, 18h51
  5. Modifier une ligne d'un fichier texte
    Par lauben dans le forum C
    Réponses: 2
    Dernier message: 27/05/2006, 12h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo