Запись векторов в файл без использования экспорта - PullRequest
6 голосов
/ 02 декабря 2011

Я заинтересован в записи нескольких векторов в файл так, чтобы каждый вектор формировал одну строку в файле и записывался в файл, как только он был сгенерирован. Элементы вектора должны быть разделены одним пробелом, и я не хочу включать { } круглые скобки для вектора. По сути, я хочу имитировать fprintf("file", "%f %f %f\n") функциональность C.

Вот что у меня есть. Есть ли лучший способ сделать это?

st1 = OpenWrite["C:\\junk\\mu.out", FormatType -> OutputForm];

vt = Table[
   v = RandomReal[{0, 1}, 5];

   For[j = 1, j <= Length[v], j++, 
    WriteString[
     st1, 
     SequenceForm[NumberForm[v[[j]], ExponentFunction -> (Null &)], 
      " "]
     ]
    ];
   Write[st1, ""];
   v,
   {200}
   ];

In[3]:= Close[st1]

Out[3]= "C:\\junk\\mu.out"

Основываясь на замечательной функции Riffle, любезно предоставленной Арноудом и мистером Волшебником, я изменил ее следующим образом:

WriteVector[stream_, vector_] :=
 Apply[WriteString[stream, ##, "\n"] &, 
  Riffle[Map[NumberForm[#, ExponentFunction -> (Null &)] &, vector], 
   " "]
  ]

1 Ответ

10 голосов
/ 02 декабря 2011

Может быть это?

WriteVector[stream_, vector_] :=
  WriteString[stream, ##, "\n"] & @@ Riffle[vector, " "]

и:

fname = "c:\\users\\arnoudb\\test.out";

, затем:

Do[WriteVector[fname, RandomReal[{0, 1}, 5]],{10}]

и проверка:

FilePrint[fname]

закрытьпоток по окончании:

Close[fname]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...