Chris Cunnington wrote:
If I had data in object memory, because I've saved answers from a user into
objects, then can I file out that information? If I had to send it to
somebody as an csv file, how could I do that easily?

I know if I could find an object with the inspector I could print data in
the Transcript and cut and paste it into another file, but is there another
way?
It seems to me that filing out gives you the application, but what if I
wanted information that had been entered by the users, the end user data?

Chris
The end-user data is presumable stored in your application's object model. Normally for me that is some kind of "database" class. Let's call it "Database" and assume it understands #default (which returns the only Database instance).

There are lots of ways to answer your question so let me mention a couple in increasing order of work involved:

   You could export your data as XML using SIXX (load from SqueakMap).
   You could export your data in binary format using ImageSegments
   You could write your data to CSV

Using SIXX you would just do this:

   s := SixxWriteStream newFileNamed: 'myData.sixx'.
   s nextPut: Database default.
   s close.

That's it.  You can read your data back in using a SixxReadStream.

Now, while SIXX is the easiest that I can think of you mentioned CSV so I'll assume you want it in that format for some reason. In any case, if XML is good enough just write your data to a file with:

Let's further suppose that the database instance understands #data which answers a collection of data items that all understand #printCSVOn:. Then I'd write that database to a file with:

fileStream := FileDirectory current newFileNamed: 'someFile.csv'.
[Database default data do: [:dataItem |
   dataItem printCSVOn: fileStream.
   fileStream cr]]
       ensure: [fileStream close].

Notice that I make sure that the fileStream get's closed even if there is an error during the writing. Now, of course, the real work is in printCSVOn: which obviously depends on your data. Suppose you have an Account class which has i-vars for accountNumber, ownerName, ownerPhoneNumber. You could write them out with:

Account>>printCSVOn: aStream
   aStream nextPutAll: '"' , accountNumber , '",'.
   aStream nextPutAll: '"' , ownerName ,'",'.
   aStream nextPutAll: '"' , ownerPhoneNumber ,'"'.


Of course CSV will probably be useless if your database has more than one type of thing in it (each line will have different columns). You could modify this example so that each different kind of thing stored in your database is written to a different file.

HTH,

David

_______________________________________________
Beginners mailing list
Beginners@lists.squeakfoundation.org
http://lists.squeakfoundation.org/mailman/listinfo/beginners

Reply via email to