Экспорт, добавление / добавление данных и текста в файлы (Mathematica) - PullRequest
6 голосов
/ 14 сентября 2011

Я экспортирую данные из таблицы «mydata1» в формате CSV в «file1.dat».Ниже приведен код 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"]

Теперь мой «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» должны быть данные из таблицы «mydata2», ниже данных из «mydata1», а между ними записан какой-то текст.

Примечание: я готов экспортировать данные с расширением TXT, но в формате CSV. Например:

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

Я использовал «PutAppend», но он не дал мне желаемых результатов.Я не использую это должным образом или возможно это не ключевое слово для моего вида проблемы.

У меня много вопросов по поводу экспорта, но я бы не стал спрашивать все это сейчас, так как не хочу вас всех смущать.

Ответы [ 2 ]

11 голосов
/ 14 сентября 2011

Потоки полезны для этой цели.Если ваша цель - генерировать mydata1 и mydata2 в разное время, вы можете сделать следующее.Сначала давайте создадим файл, содержащий 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
         ...

При желании также можно записать mydata1 и mydata2 вfile одновременно:

$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 используется каждый раз, когда мы открываем поток.Это должно отключить любую автоматическую вставку новой строки операциями записи потока.Если эта опция не указана, в выходном файле возникает нежелательный двойной интервал.

3 голосов
/ 14 сентября 2011

Возможно что-то вроде:

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