6

我正在将 CSV 格式的表“mydata1”中的数据导出到“file1.dat”中。以下是数学代码:

mydata1=TableForm[Flatten[
Table[Table[Table[
                 {xcord, ycord, zcord}, {xcord, 0,50,10}],
                   {ycord,0,50,10}], {zcord, 50, 100, 10}], 2]];

Export["file1.dat",mydata1,"CSV"]

现在我的“file1.dat”看起来像这样:

0,0,50
10,0,50
20,0,50
..
.. and so on

现在我有另一组来自表“mydata2”的数据(下面给出的代码)。我希望能够将这个表“mydata2”中的数据存储到同一个文件“file1.dat”中。但在我这样做之前我需要在文件“file1.dat”中写入文本,例如“下面的数据来自 mydata2”。

请注意,两个表中的两个数据都需要以 CSV 格式导出。

mycounter=20
mydata2=TableForm[Flatten[
Table[Table[Table[
                 {++mycounter,xcord, ycord, zcord}, {xcord, 0,50,10}],
                   {ycord,0,50,10}], {zcord, 50, 100, 10}], 2]];

最后我的数据文件“file1.dat”应该是这样的

*Data from data from mydata1
0,0,50
10,0,50
20,0,50
... and so on
*Below data from mydata2
21,0,0,50
22,10,0,50
23,20,0,50
... and so on.

如果您观察到最终数据文件“file1.dat”应该有来自“mydata1”数据下方的表“mydata2”中的数据,并且在两者之间有一些文本写入。

注意:我愿意以 CSV 格式导出扩展名为 TXT 的数据 例如:

Export["file1.txt", mydata1, "CSV"]

我使用了“PutAppend”,但它并没有给我想要的结果。要么我没有正确使用它,要么它可能不是我遇到的问题的关键字。

我有很多关于出口的问题,但我现在不会问所有这些,因为我不想让大家感到困惑。

4

2 回答 2

12

流可用于此目的。如果您的目标是在不同的时间生成mydata1mydata2,那么您可以执行以下操作。首先,让我们创建包含以下内容的文件mydata1

$stream = OpenWrite["file.dat", BinaryFormat -> True];
WriteString[$stream, "*Data from data from mydata1\n"]
Export[$stream, mydata1, "CSV"]
WriteString[$stream, "\n"]
Close[$stream]

我们可以使用以下方法验证文件的内容Import

In[10]:= Import["file.dat", "Text"]

Out[10]= *Data from data from mydata1
         0,0,50
         10,0,50
         20,0,50
         ...

现在,让我们追加mydata2到文件的末尾:

$stream = OpenAppend["file.dat", BinaryFormat -> True];
WriteString[$stream, "*Below data from mydata2\n"]
Export[$stream, mydata2, "CSV"]
WriteString[$stream, "\n"]
Close[$stream]

...再次验证:

In[20]:= Import["file.dat", "Text"]

Out[20]= *Data from data from mydata1
         0,0,50
         10,0,50
         20,0,50
         ...
         *Below data from mydata2
         21,0,0,50
         22,10,0,50
         23,20,0,50
         ...

如果需要,也可以同时写入mydata1mydata2写入文件:

$stream = OpenWrite["file.dat", BinaryFormat -> True];
WriteString[$stream, "*Data from data from mydata1\n"]
Export[$stream, mydata1, "CSV"]
WriteString[$stream, "\n*Below data from mydata2\n"]
Export[$stream, mydata2, "CSV"]
WriteString[$stream, "\n"]
Close[$stream]

请注意,BinaryFormat -> True每次打开流时都会使用该选项。这是为了禁用流写入操作的任何自动换行插入。如果省略此选项,则输出文件中会出现一些不受欢迎的双倍行距。

于 2011-09-14T14:21:32.470 回答
3

也许是这样的:

mydata1 = 
  Flatten[Table[Table[Table[
          {xcord, ycord, zcord}, 
          {xcord, 0, 20, 10}], {ycord, 0, 20, 10}], {zcord, 50, 50, 10}], 2];
mycounter = 20
mydata2 = 
  Flatten[Table[Table[Table[
          {++mycounter, xcord, ycord, zcord}, 
          {xcord, 0, 20, 10}], {ycord, 0, 20, 10}], {zcord, 50, 50, 10}], 2];

Export["c:\\test.txt", 
      Join[{"* data1 follows"}, mydata1, {"* data2 follows"}, mydata2], "CSV"]

结果文件是:

* data1 follows
0,0,50
10,0,50
20,0,50
0,10,50
10,10,50
20,10,50
0,20,50
10,20,50
20,20,50
* data2 follows
21,0,0,50
22,10,0,50
23,20,0,50
24,0,10,50
25,10,10,50
26,20,10,50
27,0,20,50
28,10,20,50
29,20,20,50
于 2011-09-14T13:21:52.100 回答