Ecrire dans TXT

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Ecrire dans TXT

Re: Ecrire dans TXT

par Ryle » 13 mars 2012, 01:00

C'est pas une expression de besoin ça, c'est un cas particulier de ce que tu veux faire :)

M'enfin voici de quoi te mettre sur la piste:
$filename = "livres/liste.txt";

// copie le contenu du fichier dans un tableau (une ligne par cellule)
$monTableau = file($filename); 

// Modifie la 2ème ligne (stockée dans la cellule 1 du tableau
$monTableau[1] = $monTableau[1] + 1; 

// Transforme le tableau en chaine
$monFichier = implode("\r\n", $monTableau); 

// Met à jour le fichier avec la chaine obtenue
$handle = fopen($filename, 'w'); // ouverture du fichier en écriture
fwrite($handle, $monFichier); // écriture du fichier
fclose($handle); // fermeture du fichier

Re: Ecrire dans TXT

par malabarbe » 12 mars 2012, 19:50

Bonsoir,

J'ai cré un fichier txt qui contiens !
111
222
333

Je voudrais incrémenter la ligne 2 pour
quelle contienne 223.

Et ensuite, réécrire le ficher avec les nouvelles données.

Re: Ecrire dans TXT

par sirakawa » 12 mars 2012, 19:38

Si on savait ce que tu cherches à faire, le résultat attendu, ce serait plus facile.
Il est certainement plus simple
dans la boucle for
de modifier le tableau $file sans s'occuper de $tout
et, après la fin de la boucle for, comme d'autres te l'ont dit avant moi, de transformer $file en $tout par
$tout = implode ("", $file);

Re: Ecrire dans TXT

par malabarbe » 12 mars 2012, 19:21

Bonsoir à tous,

Je ne m'en sort pas !
J'ai cré un fichier txt qui contiens !
111
222
333

Le code qui change la ligne 2 :

Code : Tout sélectionner

<?php $ncpt=2; $file = file("compteurs/compteurs.txt"); $nb = count($file); // compte le nombre de ligne $tout = ""; for ($i=0; $i<$nb; $i++) { if ( $i == $ncpt ) { $file[$i-1] = $file[$i-1] + 1; $tout = $tout.$file[$i-1]; } else { $tout = $tout.$file[$i]; } } $handle = fopen("compteurs/compteurs.txt", 'w'); // ouverture du fichier en écriture fwrite($handle, $tout); fclose($handle);
?>

Cela fonctionne, mais copie la ligne 2 incrémentée
a la place de la ligne 3 "333", deviens "223"

J'ai bien cherché mais pas trouvé la solution.

A vous lire.

Re: Ecrire dans TXT

par Ryle » 11 mars 2012, 11:36

Ce que je ne comprends pas :
- $file[25-1], lit dans un tableau que je n'ai pas créé.
Ah ben si, c'est toi qui l'a créé ce tableau lorsque tu as fait appel à la fonction file(). Tu as lu le fichier et tu as copié chaque ligne de celui-ci dans ton tableau $file.

Si tu modifies le tableau, cela ne modifie pas automatiquement le fichier dont il est issu, mais tu peux le faire à partir des infos données plus haut :)

Re: Ecrire dans TXT

par sirakawa » 11 mars 2012, 09:39

Dès qu'un tableau existe du genre:
$texte[0] = "Hymne";
$texte[1] ="semper laus";
$texte[2] ="sonnet"
$texte[3] ="in terra";

S'il est facile
de modifier le contenu d'un de ses éléments:
$texte[2] = "resonet",
de supprimer un de ses éléments
$texte[0]= "";
ajouter une page à la fin:
$texte[] = "la suite";
Si on désire insérer un élément, il faut d'abord décaler toutes les cellules qui suivront cet élément:
pour insérer une nouvelle page 3, il faudra faire passer $texte[3] en $texte[4], puis affecter $texte[3].
array_slice, puis array_merge deevrait y parvenir.
Ces considérations, aux syntaxes près, s'appliquent à tous les langages de programmation que je connais.
On pourrait imaginer que PHP ajoute une fonction array_insert($ligne, $tableau, $place)....
Ce que tu sembles vouloir est ce que font sans le dire les SGBD qui présentent les données sous forme de tableaux, et les stockent sous forme de fichiers, aux enregistrements de longueur fixe, permettant justement un accès direct, sachant que les objets de longueur variable comme les TEXT de mysql, sont stockés à l'extérieur du fichier de la table.

Re: Ecrire dans TXT

par Calimero » 11 mars 2012, 02:31

Vu que le tableau existe, pourquoi, ne peut
on pas réécrire une nouvelle donnée dans [25-1] ?

Une faiblesse du PHP ?
Mauvais emploi du code ?

Merci de m'éclairer.
Tu peux le faire :) Il faut juste garder en tête que le tableau, qui est une copie en mémoire du contenu du fichier, cesse d'exister à la fin de l'éxécution du script. Il faut donc veiller à écrire le contenu du tableau modifié dans le fichier à la fin, si tu veux pouvoir constater l'effet de ta modification.

Cette façon de faire est imposée par tous les systèmes d'exploitation modernes, c'est la norme.

Re: Ecrire dans TXT

par malabarbe » 11 mars 2012, 01:58

Merci à tous pour vos réponses.

Ce que je ne comprends pas :
- $file[25-1], lit dans un tableau que je n'ai pas créé.

Vu que le tableau existe, pourquoi, ne peut
on pas réécrire une nouvelle donnée dans [25-1] ?

Une faiblesse du PHP ?
Mauvais emploi du code ?

Merci de m'éclairer.

Re: Ecrire dans TXT

par Ryle » 11 mars 2012, 01:32

Et j'ajouterais qu'une fois que tu as modifié ton tableau, tu peux utiliser implode() pour en refaire une chaine que tu pourras utiliser pour réécrire le fichier :)
// Transforme le tableau en chaine
$monFichier = implode("\r\n", $monTableau); // ou juste "\n" sous unix

// Met à jour le fichier
$handle = fopen($filename, 'w'); // ouverture du fichier en écriture
fwrite($handle, $monFichier); // écriture du fichier
fclose($handle); // fermeture du fichier

Re: Ecrire dans TXT

par xTG » 10 mars 2012, 23:23

// Création du tableau
$monTableau = array(
  0 => 0,
  1 => 1,
  2 => 2,
  3 => 3
);
// Lecture d'un élément du tableau
echo $monTableau[2];
// Ecriture dans un élément du tableau
$monTableau[1] = 55;
:)

Re: Ecrire dans TXT

par malabarbe » 10 mars 2012, 23:10

Bonsoir à tous,

Merci pour vos réponces.

Ce que je ne comprends pas, c'est qu'en PHP
on peut lire le 11 ème caractère de la ligne 44 !

Mais l'oppération inverse, c'est à dire l'écriture
n'exsite pas.

Interrogation :
echo $file[25-1].'<br>'; 
Cette action a créee un tableau
comment modifier ce tableau pour la réécriture ?

A vous lire.

Re: Ecrire dans TXT

par Ryle » 10 mars 2012, 21:46

Personnellement je ne vois pas ce qui vous choque dans le 25-1. Le besoin fonctionnel exprimé c'est lire la ligne 25. La contrainte technique c'est qu'en php l'index commence à 0 et pas à 1. La meilleure "traduction" c'est bien d'afficher le calcul :)

De la même manière que pour exprimer un nombre de jours en secondes, il sera plus lisible et plus facile à maintenir si l'on écrit 3*24*60*60 que 259200 ... surtout quand on vous demandera de passer à 4 jours plutôt que 3 ;)

Re: Ecrire dans TXT

par sirakawa » 10 mars 2012, 14:41

Il faut espérer que ce 25-1 est la traduction pour simplifier de quelque chose du genre
for ($page = 1; .....)
{
...
$fichier[$page - 1];
}

Plus sérieusement, comment sont repérées les pages dans le fichier d'origine?
S'il n'y a pas en PHP d'autre solution que de lire le fichier en mémoire, de modifier en mémoire et de réécrire le fichier,
il y a peut-être un élément du fichier qui repère les pages, et permettrait cet accès.
du genre:
1) une page contient des lignes avec des sauts de ligne et rien d'autre
a) toutes les pages ont le même nombre de lignes : repérage enfantin en logeant le fichier dans un tableau
b) les pages n'ont pas toutes le même nombre de lignes: existe-t-il un moyen de repérer la fin de page : un saut de ligne suivi de plusieurs lignes vides, par exemple. Si oui, repérage possible à condition de bien concevoir le tableau.
2) le texte contient des repères explicites de pages (mot page, numéro de page, titre courant...) : => cas 1) b)
Dans tous les cas, je déclarerais un tableau $texte
et par des fgets, je placerais les lignes une à une dans le tableau (cas 1a):
$texte[] = $ligne;
le repérage est par $première_ligne_de_la page = ($nombre_de_lignes_par_page * ($numero_de_page_voulue -1)) sachant que les tableaux sans autre précision démarrent à 0...

Re: Ecrire dans TXT

par moogli » 09 mars 2012, 21:09

Y a que moi qui suis etonné par le 25-1 ? :mrgreen:

@+

Re: Ecrire dans TXT

par sirakawa » 09 mars 2012, 20:40

Modifie l'array comme bon te semble, puis réinjecte le tout dans ton fichier.
En informatique on ne modifie pas une partie de fichier, on réécrit son ensemble à chaque fois mais avec les instructions qui ont été modifiées.
Strictement parlant, ce n'est pas en informatique, mais dans PHP, car il existe depuis qu'on a dépassé les bandes magnétiques, des fichiers d'accès direct, d'accès direct indexé, implantés en C, en Java, en Fortran, en Pascal, Cobol, Perl, en Python, et même, c'est pour dire, en Basic..
En voir l'intérêt ici, par exemple:
http://www-ipst.u-strasbg.fr/pat/program/algo09.htm