Arí Ricardo Ody wrote:
Suppose the following structure:

01 a-1.
   03 b-1 pic xxx.
   03 b-2 pic 999.
   03 b-3.
      05 c-1 pic aaa.
      05 c-2.
         07 d-1 pic zzz.
         07 d-2 pic xxx.
      05 c-3 pic 99.
   03 b-4 pic zzz.
   03 b-5.
      05 e-1 pic zzz.

All line not containing the word pic I would call a group item and the other lines will be elementary items.

I would like to wrote a routine(or program) that save each group item and the elementary items contained in a StringList. Admit that the pattern of the structure is random. The example above is only an example.

In this example:
StringList1 will contain 'a-1' '03 b-1 pic xxx.' '03 b-2 pic 999.' '03 b-4 pic zzz.'
StringList2 will contain 'b-3' '05 c-1 pic aaa.' '05 c-3 pic 99.'
StringList3 will contain 'c-2' '07 d-1 pic zzz.' '07 d-2 pic xxx.'
StringList4 will contain 'b-5' '05 e-1 pic zzz.'

At the end of the program I will(for example) write the StringList's to disk. But I can't write anyone before the program end.

I had thinked hard about it. I can't create StringList with a variable name. I must previously declare each one in my pascal source. How can I solve the trouble proposed?
"I can't create StringList with a variable name."

I don't know how much pascal experience you have. and I am not 100% sure what this line means, but taking a guess: You need a way to store "stringlist2" in stringlist1 => So that if you later read the list, you can read the nested lists too?

You do not need a variable for each Stringlist you create.

Procedure AddNestedStringlist(OuterStringlist: TStringList; Text: String);
var
 InnerStringList: TStringlist;
begin
 InnerStringList := TStringlist.Create;
 OuterStringlist.AddObject(Text, InnerStringlist);
end;

Thats it. Note that there is no InnerStringlist.Free.


The stringlist you created is not bound to the variable "InnerStringlist". It is just a stringlist in memory, and any variable (of the correct type) can refer to it.

To read the variable back (you need a type cast):
NextedStringList := TStringList(OuterStringList.Objects[n]);


Before you Free OuterStringlist, you have to check for any InnerStringlist and destroy it, or you will leak memory.


Note that when I'm appending strings in a StringList, it's possible that I must create a new StringList(or various), put data in it(or them) and return to put data in the first StringList.

If the solution is obvious I beg your pardon. I can't find it. * *
------------------------------------------------------------------------

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to