On Thursday 10 June 2010 21:02:08 Richard wrote: > Greetings to the list on a fine warm sunny evening in Belfast, > > But here I am, indoors, trying to find an "easy" way to make some data more > persistent. > > In a small app I am writing for my brother I have a number of classes > designed to hold information about video and audio clips. Some of the data > is "expensive" to gather - it takes time to process MBytes-GBytes of video > to find out, for example, how many frames have been captured and how many > dropped. > > In C I might have used an array of structures, or somesuch. In Gambas I > have implemented the data store as a collection of class instances. > > I am trying to find a way to write the property names and values to a file > and I cannot seem to find anywhere in the documentation, or in my archive > of this list, a reference to the method used by the IDE when it prints a > table to the screen of a highlighted class instance name (in break mode of > course). > > The only practical alternative I can see at the moment is to write a long > procedure to write these names and values to a file but there is so much to > copy it is quite daunting, and likely to be typing-error-prone. Since in > debug mode Gambas already knows how to create tables of the data I want to > save, can I not discover this and do it the same way? Perhaps some of you > already know how. Here's Hoping! > > Richard > > --------------------------------------------------------------------------- >--- ThinkGeek and WIRED's GeekDad team up for the Ultimate > GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the > lucky parental unit. See the prize list and enter to win: > http://p.sf.net/sfu/thinkgeek-promo > _______________________________________________ > Gambas-user mailing list > Gambas-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/gambas-user
Never underestimate the power of the act of asking for help in concentrating the mind on a problem. I am embarrassed to admit that I have struggled with this one for months and now that I have discovered the answer I am even more embarrassed to admit I had not been reading the manual with enough care. In partial defence I have to say that the syntax examples for Class[] and Classes[] confused me. First off the illustration for Class (Class[]) doesn't work in my test program: DIM hClass AS Class DIM hSymbol AS .Symbol hSymbol = hClass [ Name AS String ] The declaration of hSymbol doesn't pass the parser's inspection; complaints about an unexpected "." and a failure to recognise .Symbol as a valid variable type mean that I had to change it to: DIM hSymbol AS Variant Secondly I repeatedly failed to grasp the difference between the uses of "[Name AS String]" in this and in the example for Classes[]: DIM hClass AS Class hClass = Classes [ Name AS String ] I now know that in the first case (Class[]) the Name refers to the name of a class symbol (property, method, event, etc) and in the second (Classes[]) it must be the quoted name of a Class. So, the solution to my problem goes something like this: PUBLIC SomeInstance AS NEW ClipAudio("Clip_Name.wav") PUBLIC SUB Action_Click() DIM fp AS stream fp = OPEN User.home &/ "myclassdata.test" FOR OUTPUT CREATE write_properties(fp, SomeInstance) CLOSE fp END PRIVATE PROCEDURE write_properties(ofile AS stream, instance AS Object) DIM hClass AS Class DIM hSymbol AS Variant DIM symbol_name AS String DIM prop_val AS String hClass = Object.Class(instance) FOR EACH symbol_name IN hClass.Symbols hSymbol = hClass[symbol_name] IF Class.Property = hClass[symbol_name].Kind THEN prop_val = Str(Object.GetProperty(instance, symbol_name)) PRINT #ofile, symbol_name & "=" & prop_val ENDIF NEXT END With a bit more hacking I will have section names like [SomeInstance] followed by property=value lines and I should be able to use gb.Settings to read the data back into the program on the next run. And so to bed... Richard ------------------------------------------------------------------------------ ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user