2011-09-14 24 views
6

Estoy exportando datos de la tabla "mydata1" en formato CSV a "archivo1.dat". A continuación se muestra el código Mathematica:Exportación, adición/anexión de datos y texto en archivos (Mathematica)

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"] 

Ahora mi "file1.dat" tiene el siguiente aspecto:

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

Ahora tengo otro conjunto de datos de la "mydata2" mesa (Código da a continuación). Quiero poder almacenar los datos de esta tabla "mydata2" en el mismo archivo "file1.dat". Pero antes de hacerlo necesito escribir un texto en el archivo "file1.dat" para, por ejemplo, "Los datos a continuación son de mydata2 ".

Tenga en cuenta que ambos datos de ambas tablas deben exportarse en formato 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]]; 

al final mi archivo de datos "file1.dat" debería tener este aspecto

*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. 

Si observar el archivo de datos final "file1.dat" debe tener datos de la tabla "mydata2" por debajo los datos de "mydata1" y entre ellos hay un texto escrito.

Nota: Estoy dispuesto a exportar los datos con la extensión TXT pero en formato CSV Por ejemplo:

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

he utilizado el "PutAppend" pero me doy la dosis no deseada results.Either No lo estoy usando correctamente o tal vez no sea la palabra clave para mi tipo de problema.

Tengo muchas preguntas con respecto a la exportación, pero no quisiera preguntar todo esto ahora, ya que no quiero confundirlos a todos.

Respuesta

3

Tal vez algo como:

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"] 

El archivo resultante es:

* 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 
+0

Gracias por la respuesta, he utilizado su respuesta ya que se ajustaba a mis requisitos –

10

corrientes son útiles para este propósito. Si su objetivo es generar mydata1 y mydata2 en diferentes momentos, entonces podría hacer lo siguiente. En primer lugar, vamos a crear el archivo que contiene mydata1:

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

Podemos comprobar el contenido del archivo usando Import:

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

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

Ahora, vamos a anexar mydata2 al final del archivo:

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

... y nuevamente, verificar:

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 
     ... 

Si se desea, también es posible escribir mydata1 y mydata2 en el archivo al mismo tiempo:

$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] 

Tenga en cuenta que la opción BinaryFormat -> True se utiliza cada vez que abrimos la corriente.Esto es para deshabilitar cualquier inserción automática de nueva línea mediante las operaciones de escritura de flujo. Si se omite esta opción, se produce un espaciado doble no deseado en el archivo de salida.

+0

Hola Gracias por la respuesta. –

+0

Gracias WReach. ¡Esto fue muy útil! –

Cuestiones relacionadas