2011-09-14 12 views
6

Eksportuję dane z tabeli "mydata1" w formacie CSV do "pliku1.dat". Poniżej znajduje się kod Mathematica:Eksportowanie, dołączanie/przygotowywanie danych i tekst do plików (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"] 

Teraz moja „file1.dat” wygląda następująco:

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

Teraz mam inny zestaw danych z tabeli „mydata2” (kod poniżej). Chcę móc przechowywać dane z tej tabeli "mydata2" w tym samym pliku "file1.dat". Ale zanim to zrobię, muszę napisać tekst w pliku "file1.dat" np. "Dane poniżej są z mydata2 ".

Należy zauważyć, że oba dane z obu tabel muszą zostać wyeksportowane w formacie 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]]; 

w końcu mój plik danych „file1.dat” powinien wyglądać ten

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

Jeśli obserwować ostateczną plik danych „file1.dat” powinny mieć dane z tabeli „mydata2” poniżej dane z "mydata1" i pomiędzy nimi jest napisany tekst.

Uwaga: Jestem gotów do eksportu danych z rozszerzeniem TXT ale w formacie CSV Na przykład:

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

Użyłem „PutAppend”, ale nie robi to daje mi żądany results.Either Nie używam go właściwie, a może nie jest słowem kluczowym dla mojego rodzaju problemu.

Mam dużo pytań dotyczących eksportu, ale nie chciałbym o to teraz prosić, ponieważ nie chcę was wszystkich mylić.

Odpowiedz

3

Może coś takiego:

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

Plik wynikowy jest:

* 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

Dziękuję za odpowiedź, użyłem twojej odpowiedzi, ponieważ spełniło moje wymagania. –

10

Strumienie są przydatne do tego celu. Jeśli Twoim celem jest generowanie mydata1 i mydata2 w różnych momentach, możesz wykonać następujące czynności. Najpierw stwórzmy plik zawierający mydata1:

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

Możemy sprawdzić zawartość pliku przy użyciu Import:

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

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

Teraz niech dołączy mydata2 do końca pliku:

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

... i jeszcze raz, sprawdź:

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

W razie potrzeby możliwe jest również, aby napisać mydata1 i mydata2 do pliku w tym samym czasie:

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

Uwaga że opcja BinaryFormat -> True służy za każdym razem, kiedy otworzyć strumień.Umożliwia to wyłączenie automatycznego wstawiania nowej linii przez operacje zapisu strumienia. Jeśli ta opcja zostanie pominięta, w pliku wynikowym wystąpią niepożądane podwójne odstępy.

+0

Hej Dzięki za odpowiedź. –

+0

Dzięki WReach. To było bardzo pomocne! –

Powiązane problemy