随时写入文件


2

我想知道是否有办法在Do循环期间将数据写入文件,而无需等到结束。

我已经编写了一个代码,它扫描了许多插入许多公式的参数。然后我有一个特定的输出值的条件决定我是否将数据点追加到我的列表。

我为特定次数的迭代运行'Do'循环,并且每次满足条件时,该点的值将被附加到我的列表中。
在Do循环结束时,我将列表导出到.txt文件。

有没有办法让Mathematica在运行Do循环时将数据点值写入到.txt文件中...以便它不断更新列表?

我之所以希望这样做的原因是,如果电脑崩溃(说它运行了一整天后),那么我不会失去所有点,因为它们仍然在txt文件中。

我试图把出口命令放在Do循环中,但是mathemtica似乎并不喜欢那样。

我是mathematica的新手,我只用了两周的时间......我试过在网站上搜索和搜索一些信息,但找不到任何东西......也许那是因为这个功能不存在吗?......如果有人能让我知道这将是伟大的欢呼声!

  0

当我读它时,他想每次都追加到同一个文件(?)。为此,请参阅OpenWrite [],WriteString []和相关函数。 24 8月. 132013-08-24 19:53:56

3

你的意思是这样的吗?应该在每个Write后写入磁盘,因此我认为您不需要使用Append关闭并重新打开循环内的文件。但如果需要,很容易做到。

另外,如果你是在Linux/Unix系统,或与Cygwin和这样的窗口,则可以按数学的内部的运行在单独的窗口中键入命令

tail -f log.txt 

和查看该文件被更新循环。

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] 

] 

这是一个在每次写入后关闭文件并将其作为附加文件打开的版本。

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]} 
  ]; 

检查

>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

谢谢你的帮助! 似乎我实际上需要的是'PutAppend'而不是'AppendTo'和'Export' - 抱歉,我是新手,所以我不知道一些明显的东西。但通过你的例子教我有很多有用的东西,我不知道,所以它的一切都很好:) 再次感谢 25 8月. 132013-08-25 16:22:52

  0

@kingmonkeywoman如果你有一个好/更好的答案,你应该发布它作为答案。 25 8月. 132013-08-25 22:27:57