PHP modifier une colonne d'un fichier txt

Petit nouveau ! | 4 Messages

14 juil. 2009, 23:55

Bonjour

Je voudrais modifier la deuxième colonne d'un fichier texte (txt) donc voici un aperçu

fromage#15#bleu
fromage#12#tome
yaourt#5#fraise

ce serai pour rajouter 10 à 15,12,et 5.
J'arrive à remplacer ligne par ligne mais pas tout le fichier

Merci d'avance

voici mon code qui ne fonctionne pas

Code : Tout sélectionner

if (file_exists($Fnm)) { $tableau = file($Fnm); for($i=0;$i<sizeof($tableau);$i++){ $infos=explode("#",$tableau[$i]); $nv_prix==$infos[1]+10; fputs($nv_prix,$tableau[1]); } fclose($inF); }
:lol:

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 2287 Messages

15 juil. 2009, 00:10

Bonjour,

Bizarre ton code : tu avais bien commencé, mais sur la fin on dirait que t'as tout bâclé histoire de partir en week-end plus vite :-*
if (file_exists($Fnm)) {
  $tableau = file($Fnm);
  for($i=0;$i<sizeof($tableau);$i++){
    $infos=explode("#",$tableau[$i]);

    // à partir d'ici
    $nv_prix==$infos[1]+10;

    fputs($nv_prix,$tableau[1]);
    // et jusque là, rien ne va plus !
  }
  fclose($inF);
}
Pour l'exercice, est-ce que tu as des idées sur ce qui cloche là dedans ?

Et sinon, code mis à part et pour info, sais-tu que les bases de données sont un outil mieux adapté pour le stockage et le genre d'opération que tu veux réaliser qu'un simple fichier texte ? En effet, si tu avais utilisé une bdd, tu aurais pu obtenir le même effet avec une requête sql simple ;)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Petit nouveau ! | 4 Messages

15 juil. 2009, 14:11

Merci d'avoir pris le temps de me répondre

non je n'ai plus d'idée, et cela fait un moment que je cherche (sur les forums..ect).
Peut être dois je refaire une boucle:

Code : Tout sélectionner

for($i=0;$i<sizeof($tableau);$i++){ { fputs($nv_prix,$tableau[1]);
mais je ne sais plus.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Petit nouveau ! | 4 Messages

15 juil. 2009, 14:13

Oui pour les bases de données je sais que c'est plus simple; mais je ne veux pas payer plus cher d'hébergement et sur le serveur Sqlite n'est pas installé.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Eléphant du PHP | 65 Messages

15 juil. 2009, 15:41

Deux petites idées pour t'aider à avancer :

Ne pas confondre :
== est un opérateur de comparaison.
= est un opérateur d'affectation
Consulter la doc pour les fonctions :
implode(), fopen() et la liste des modes, fwrite()

Fred

Petit nouveau ! | 4 Messages

15 juil. 2009, 15:46

merci de me répondre
j'ai déjà lu et relu la doc, mais j'avoue que je suis cancre..

Eléphant du PHP | 65 Messages

15 juil. 2009, 16:42

j'ai déjà lu et relu la doc, mais j'avoue que je suis cancre..
Alors peut-être peux-tu essayer de comprendre ceci
qui n'est qu'une solution parmi d'autres :
<?php
$fichierProduits='test.txt';

if (file_exists($fichierProduits)) {

  $produits = file($fichierProduits);
  
  // Ouvre en écriture seule ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0.
  $pFichier=fopen($fichierProduits,'w');

  foreach ($produits as $produit) {
  
	// Coupe $tableau[$i]  en segments (délimiteur=#)
	$description=explode("#",$produit);

	// Ajoute 10 au contenu de $infos[1]
	$description[1]+=10;

	// Ecriture de la ligne reconstruite avec la nouvelle info
	fwrite($pFichier,implode("#",$description));
  }
  
  // Fermeture du fichier
  fclose($pFichier);
}
Fred

Invité
Invité n'ayant pas de compte PHPfrance

15 juil. 2009, 22:58

merci beaucoup Fred!

le code est trés bien expliqué.

Je ne connaissais pas la fonction foreach, maintenant je peux me passer d'une BDD; enfin pour des données en petite quantité.



André