Newsgroup: it.comp.lang.delphi
Titolo: file ini oppure txt??

Ciao, devo memorizzare una sequenza di nomi di file con i relativi
percorsi.
Ora la lista la metto in una StringList, l'utente la modifica,
aggiunge/toglie le righe ecc., e poi la salvo pari pari in un file di
testo (che poi sarà anche quello che viene caricato nella stessa
StringList all'avvio del programma). Funge tutto anche con oltre 1000
righe non ho problemi, e il file è di circa 100Kb.
Siccome per ogni file devo memorizzare un commento, pensavo di usare un
file .ini così lo divido in sezioni con le relative chiavi, però da
qualche parte mi sembrava di aver letto che con file olre i 32Kb ci sono
problemi.
Al momento memorizzo percorso del file e commento sulla stessa riga,
separati da un simbolo e non ho problemi, però se c'è un sistema migliore
ben volentieri.
Voai cosa dite?
GRazie!!
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

xml?
A.

Voai cosa dite?
Che puň andar bene cosě.
E' una soluzione semplice e funzionale.  In certi casi, io ho
rinunciato a rinchiudere determinate informazioni "omogenee" in
strutture piů o meno articolate, vedi XML o file INI, ricorrendo a
semplicissimi file di testo.

 xml?
certo, bisogna importare la type library MSXML2.DLL e manipolare il 
DOMDocument. 
Qui c'è una routine di uso generico che ho creato una volta:
function _LoadFromXML(const FileName: string; out Document: 
IXMLDOMDocument2;
  out Error: string): Boolean;
{ tenta di caricare in Document il file XML FileName e se il parser trova 
un errore,
  la descrizione viene messa in Error e il risultato è False;
  se il documento è well-formed invece viene restituito True. }
var
  d: TDOMDocument40;
  s: TStringList;
begin
  d:= TDOMDocument40.Create(nil);
  try
    with d.DefaultInterface do
    begin
      async:= False;
    { When set to True, the load method returns control to the caller
      before the download is finished.
      You can then use the readyState property to check the status of the 
download}
      validateOnParse:= True;
      resolveExternals:= False;
    { When is True, external definitions are resolved at parse time.
      This allows default attributes and data types to be defined on 
elements
      from the schema and allows use of the DTD as a file inclusion 
mechanism }
      load(FileName);
      if parseError.errorCode <> 0 then
        with parseError do
      //creiamo il testo degli errori riscontrati dal parser
        begin
          Result:= False;
          s:= TStringList.Create;
          try
            with s do
            begin
              Add(Format('url:' + sLineBreak + '"%s"', [url]));
              Add(Format('reason:' + sLineBreak +'"%s"', [Trim(reason)]));
              Add(Format('srcText:' + sLineBreak +'"%s"', 
[Trim(srcText)]));
              Add(Format('line#: %u; linePos#: %u', [line, linePos]));
              Error:= Trim(Text);
            end
          finally
            s.Free
          end;
        end
      else    //il documento è well-formed
        begin
          Error:= '';
          Result:= True;
          Document:= d.DefaultInterface;
        end
    end
  finally
    d.Free
  end
end;
Altra routine utile:
function GetAttrByName(XML_Node: IXMLDOMNode; const AttrName: WideString): 
string;
{ restituisce il contenuto dell'attributo AttrName di XML_Node: se esiste, 
come
  space trimmed string, se non esiste, come stringa nulla }
var
  a: IXMLDOMNode;
  attr: IXMLDOMNamedNodeMap;
begin
  Result:= '';
  attr:= XML_Node.attributes;
  if Assigned(attr) then
  begin
    a:= attr.getNamedItem(AttrName);
    if Assigned(a) then
      Result:= Trim(a.text)
  end;
end;
E infine:
{ restituisce il numero totale di nodi di tutti i rami child di Node;
  se IncludeThis è True, include nel conteggio anche Node. }
function GetTotalNodeCount(Node: IXMLDOMNode; IncludeThis: Boolean = 
False): Cardinal;
//uso interno
var
  cResult: Cardinal;
procedure _callBack(Node: IXMLDOMNode);
{ routine a uso interno di GetTotalNodeCount }
begin
  Inc(cResult);
end;
function GetTotalNodeCount(Node: IXMLDOMNode; IncludeThis: Boolean): 
Cardinal;
begin
  if IncludeThis then
    cResult:= 1
  else
    cResult:= 0;
  XMLNodeIterator(Node, _callBack);
  Result:= cResult;
end;
-- 
Mauro Falzari 
 
  La teoria è quando si sa tutto ma non funziona niente. 
  La pratica è quando funziona tutto ma non si sa il perchè. 
  In ogni caso si finisce sempre a coniugare la teoria con la pratica: 
  non funziona niente e non si sa il perchè. 
   (Albert Einstein)

Grazie, proverň!
