MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Appending 2D arrays to files?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg49196] Re: [mg49151] Appending 2D arrays to files?
  • From: Sseziwa Mukasa <mukasa at jeol.com>
  • Date: Wed, 7 Jul 2004 01:42:31 -0400 (EDT)
  • References: <200407050854.EAA14779@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

On Jul 5, 2004, at 4:54 AM, Jonathan Greenberg wrote:

> This is a followup to the "Joining 2D arrays" question -- thanks to 
> everyone
> who replied.  If I want to append a 2D array of a fixed column width 
> but
> arbitrarily long number of rows to a CSV file (so I'm adding new rows 
> to the
> file after each output of my model), how do I do this?

The easiest way is probably to use Export to write to a set of CSV 
files and then use a script to concatenate the files together.  For 
example in Unix, assuming the CSV files have names of the from 
datan.csv where n is some integer then cat data*.csv > result will 
concatenate them into a file named result.

If you want to do this entirely within Mathematica, the following 
function writeascsv will append a 2D matrix to a file in CSV format.  
Just keep the file open during your run.

interleave[a_, b_] := Block[{la = Length[a],
    lb = Length[b], l, r}, r = Range[Min[la, lb]]; l = 
Flatten[Transpose[{a[[r]],
        b[[r]]}], 1]; If[la > lb, Append[l, Last[a]], l]]

writeascsv[chan_,mat_]:=WriteString[chan, ##, "\n"] & @@@ 
(interleave[#, Table[
     ",", {Length[#] - 1}]] & /@mat)

A less complicated way to accomplish this is to use PutAppend (>>>).  
Write all your matrices as Mathematica expressions to a file then use

Export["resultfilename.csv",Join@@ReadList["fileofexpressions"]]

The drawback to this technique of course is that an extra copy of the 
data is left in a file.

Regards,

Ssezi


  • Prev by Date: Re: If and openwrite and openappend
  • Next by Date: Re: Solid plot
  • Previous by thread: Appending 2D arrays to files?
  • Next by thread: LinkInterrupt in C