Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2000
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2000

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

Search the Archive

Re: Dealing with irregular shaped arrays

  • To: mathgroup at smc.vnet.net
  • Subject: [mg22063] Re: Dealing with irregular shaped arrays
  • From: "Mariusz Jankowski" <mjkcc at usm.maine.edu>
  • Date: Fri, 11 Feb 2000 02:38:49 -0500 (EST)
  • Organization: University of Southern Maine
  • References: <87trbn$5ns@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Steve, First a comment: upgrade to version 4 since its functionality for
reading data and manipulating arrays is much improved. However, in version
3, the following will work.

In[2]:=
strm = OpenRead["d:\\temp\\test.txt"]

Out[2]=
InputStream["d:\\mjkcc\\temp\\test.txt", 5]

In[4]:=
data = ReadList[strm, Number, RecordLists -> True]

Out[4]=
{{1, 3, 5}, {2, 2, 1, 3, 7}, {3, 9}, {4, 7, 9, 2},
  {5, 2, 1}}

Define a padding function. Version 4 has a built-in function.

In[5]:=
pad[x_, L_] := Join[x, Table["na", {L - Length[x]}]]

Find the length of the longest record

In[6]:=
Max[Length /@ data]

Out[6]=
5

Pad each record and transpose

In[9]:=
arr=Transpose[(pad[#1, %] & ) /@ data]

Out[9]=
{{1, 2, 3, 4, 5}, {3, 2, 9, 7, 2}, {5, 1, "na", 9, 1},
  {"na", 3, "na", 2, "na"}, {"na", 7, "na", "na", "na"}}

At this point you are done.

A1=arr[[1]];
A2=arr[[2]]; etc

Good luck,

Mariusz



======================================
Mariusz Jankowski
University of Southern Maine
email: mjkcc at usm.maine.edu


Steve <nospam at nospam.com> wrote in message news:87trbn$5ns at smc.vnet.net...
> I need to import and process an irregular shaped array contained in a
> tab-delimited text file using version 3.0. The simplified structure
> looks like the following 5 rows of data except that in general, the
> actual data will not necessarily be integer:
>
> 1    3    5
> 2    2    1    3    7
> 3    9
> 4    7    9    2
> 5    2    1
>
> I need to "pad" the empty slots with a text string such as "N/A" so that
> the resulting array will be a complete 5x5 array. Then I need to assign
> a unique variable name to each column so that the end result will look
> like:
>
> A={1,2,3,4,5}
> B={3,2,9,7,2}
> C={5,1,N/A,9,1}
> D={N/A,3,N/A,2,N/A}
> E={N/A,7,N/A,N/A,N/A}
>
> I've tried
>
> in1=OpenRead["Input.txt"]
> data=ReadList[in1,Number,RecordLists->True]//TableForm
>
> which returns the array with the "empty slots" but I don't see how to
> partition this into the structure I need.
>
> Thanks for any help.
>
> Steve
>
>




  • Prev by Date: re: Orientation of characters in FrameLabel
  • Next by Date: Re: global real variables
  • Previous by thread: RE: Dealing with irregular shaped arrays
  • Next by thread: Simplifying expressions for use in C programs