Écrire dans un fichier comme il va


2

Je me demandais s'il y avait un moyen d'écrire des données dans un fichier, pendant une boucle Do, sans avoir à attendre la fin.

J'ai écrit un code qui analyse de nombreux paramètres qui sont branchés dans de nombreuses formules. J'ai alors une condition sur une valeur de sortie particulière qui décide si j'ajoute le point de données à ma liste.

Je lance une boucle 'Do' pour un certain nombre d'itérations, et chaque fois que la condition est remplie, les valeurs de ce point sont ajoutées à ma liste.
À la fin de la boucle Do, j'exporte la liste dans un fichier .txt.

Existe-t-il un moyen pour que Mathematica écrive les valeurs des points de données dans un fichier .txt lorsqu'il exécute la boucle Do ... de sorte qu'il met constamment à jour la liste?

La raison pour laquelle j'espérais ainsi est que si l'ordinateur tombe en panne (disons après avoir fonctionné pendant une journée entière!) Alors je ne perds pas tous les points car ils restent dans le fichier txt.

J'ai essayé de placer la commande export dans la boucle Do mais mathemtica n'a pas semblé aimer ça.

Je suis nouveau à mathematica, je ne l'utilise que depuis deux semaines ... J'ai essayé de googler et de chercher sur ce site pour des informations mais je ne trouve rien ... peut-être C'est parce que cette fonctionnalité n'existe pas? ... Si quelqu'un pouvait me faire savoir de toute façon que ce serait de grands encouragements!

  0

Salut à tous. [Cette question] (http://mathematica.stackexchange.com/questions/8822/exporting-lists-to-files) semble assez proche de ce que vous voulez. 24 août. 132013-08-24 19:24:41

  0

comme je l'ai lu, il veut ajouter à chaque fois le même fichier (?). Pour cela, voir OpenWrite [], WriteString [] et les fonctions connexes. 24 août. 132013-08-24 19:53:56

3

Vous voulez dire quelque chose comme ça? L'écriture doit être vidée sur le disque après chaque Write, par conséquent je ne pense pas que vous devez fermer et rouvrir le fichier à l'intérieur de la boucle en utilisant Ajouter. Mais il est facile de le faire si nécessaire.

Aussi, si vous êtes sur le système Linux/Unix ou Windows avec Cygwin et tel, vous pouvez taper la commande

tail -f log.txt 

dans une fenêtre séparée et afficher le fichier mis à jour comme Mathematica est en cours d'exécution à l'intérieur du boucle.

SetDirectory[NotebookDirectory[]]; 
lst = Table[i, {i, 100}]; 
o = OpenWrite["log.txt"]; 

If[o === $Failed, 
Print["failed to open file"] 
, 

Do[ 
  If[PrimeQ[lst[[n]]], Write[o, lst[[n]]]] 
  ,{n, Length[lst]}
  ]; 
Close[o] 

] 

Voici une version qui ferme le fichier après chaque écriture et l'ouvre en tant qu'ajout.

SetDirectory[NotebookDirectory[]]; 
lst = Table[i,{i, 100}]; 

Do[ 

  If[PrimeQ[lst[[n]]], 
  o = OpenAppend["log2.txt"]; 
  If[o ===$ Failed, Throw[o]]; 

  Write[o, lst[[n]]]; 
  Close[o] 
  ] 

  , {n, Length[lst]} 
  ]; 

check

>cat log.txt 
2 
3 
5 
7 
11 
13 
17 
19 
23 
29 
31 
37 
41 
43 
47 
53 
59 
61 
67 
71 
73 
79 
83 
89 
97 
> 
  0

merci pour l'aide les gars! Il semble que tout ce dont j'avais réellement besoin était 'PutAppend' au lieu de 'AppendTo' et 'Export' - désolé je suis nouveau à ceci donc je ne connais pas certaines choses évidentes.Mais passer par votre exemple là-haut m'a appris pas mal de choses utiles que je ne connaissais pas alors tout est bon :) Merci encore 25 août. 132013-08-25 16:22:52

  0

@kingmonkeywoman Si vous avez une bonne/meilleure réponse, vous devriez l'afficher comme réponse. 25 août. 132013-08-25 22:27:57