Newsgroup: it.comp.lang.delphi
Titolo: HELP: Oggetti annidati e casting

Salve a tutti.
Sto scrivendo un programma che leggerebbe da un file di testo dei dati, 
li immagazzinerebbe negli oggetti e alla fine del lavoro salverebbe 
tutto nello stesso file (riscrivendolo).
Il file doverebbe avere questa forma:
<begin object>
<category>Category_1
<boa>
<name>firstname
<value>John
<eoa>
<boa>
<name>lastname
<value>Smith
<eoa>
<boa>
<name>company
<value>Borland
<eoa>
<boa>
<name>phone
<value>123-4567890
<value>
223-9876543
<value>345-1212121
<eoa>
<end object>
 
<begin object>
 
...... etc....		
<end object>
Il codice che ho scritto non funziona per problemi di violazioni di 
memoria. Ho ridotto l codice al minimo per facilitarvi la lettura e ho 
tradotto le variabili in inglese per poter chiedere anche ai ng in 
inglese. Perciò se mi è sfuggito qualche errore chiedo scusa in 
anticipo. Qualcuno saprebbe indicarmi qual'è l'errore (o gli errori) che 
ho commesso?
Grazie.
Stiv
--------------------------------------------------------
unit varObjects;
   ..........	
   attrib=class
     name: ShortString;
     attrList: TStringList;
   end;
   ..........
   element=class
     category: ShortString;
     attributes: TObjectList; {List of objects attrib}
   end;
   ..........	
end.
--------------------------------------------------------
unit configureObjects;
   uses varObjects;
   ..........
   var
      objActual: element;
      objActualAttr: attrib;
      lstObjects: TObjectList;
   ..........
      lstObjects:=TObjectList.Create;
   ..........
   procedure objManager.readObjects(strProperty: ShortString; strValue: 
ShortString);
     begin
       if strProperty='begin object' then
       begin
         objActual:=element.Create;
         objActual.attributes:=TObjectList.Create;
       end
       else if strProperty='category' then objActual.category:=strValue
       else if strProperty='boa' then
       begin
           objActualAttr:=attrib.Create;
           objActualAttr.attrList:=TStringList.Create;
       end
       else if strProperty='name' then objActualAttr.name:=strValue
       else if strProperty='value' then objActualAttr.attrList.Add(strValue)
       else if strPropery='eoa' then objActual.attributes.Add(objActualAttr)
       else if strPropery='end object' then lstObjects.Add(objActual);
     end;
   ..........
   procedure objManager.save;
     var fileBackup: TextFile;
     strLine: String;
     i, j: integer;
     begin
       AssignFile(fileBackup, 'objects.dat');
       Rewrite(fileBackup);
       for i:=0 to (lstObjects.Count -1) do
         begin
           objActual:=element(lstObjects.Items[i]);
           write(fileBackup, NewLine);
           writeln(fileBackup, '<begin object>');
           strLine:='<category>' + objActual.category;
           writeln(fileBackup, strLine);
           write(fileBackup, NewLine);
           writeln(fileBackup, '<boa>');
           objActualAttr:=attrib(objActual.attributes);
           strLine:=objActualAttr.name;
           writeln(fileBackup, '<name>' + strLine); // strLine contiene 
un sacco di caratteri spazzatura. Dovrei fare il casting e se si, come?
	  {
		Questo è il blocco del codice dove ottengo l'errore Access violation
	  for j:=0 to (objActualAttr.attrList.Count - 1) do
           begin
             strLine:=objActualAttr.attrList.Strings[0];
             writeln(fileBackup, '<value>');
           end;
	  }
           writeln(fileBackup, '<eoa>');
           write(fileBackup, NewLine);
           writeln(fileBackup, '<end object>');
           write(fileBackup, NewLine);
         end;
       CloseFile(fileBackup);
     end;
--------------------------------------------------------

--------------------------------------------------------
spero il problema sia ciò che ti ho detto ...
è l'unica cosa che, nella lettura del codice,
non ho compreso ...
forse volevi ottenere qualche casting particolare
che io non ho avuto l'acume di interpretare?
	Ciao
	MassimoB
 

 	
Grazie, Massimo.
Stiv

Grazie, Massimo.
"niente" :)
	Ciao
	MassimoB