Ver Mensaje Individual
  #5  
Antiguo 14-11-2005
bustio bustio is offline
Miembro
 
Registrado: oct 2003
Posts: 231
Reputación: 21
bustio Va por buen camino
Mas para LEPE

Creo que no entendi muy bien lo que me tratas de decir con lo de destruir mi instancia de Trash... y aprovecho para comentarte un poco mas mi algoritmo de antes.

Código Delphi [-]
{Procedimiento que marca como malas las lineas que estan dentro de llaves,
pues son todas comentarios.}
procedure TLOCounter.DelMultipleComments;
var
  i, k:  Integer;
  Token: String;
  Line:  String;
  Trash: TTrashLine;//Clase para almacenar el numero de las lineas donde hay 
comentarios y el tipo de comentario que es.
begin
  TrimL;//Metodos de la clase TLOCounter que elimina los espacios en blanco a la derecha y a la izquierda de las lineas del codigo que se analiza.
  TrimR;

  for i := 0 to LinesOfCode.Count - 1 do
  begin
    Line := LinesOfCode.Strings[i];
    Token := Copy(Line,1,1);//token es el primer caracter de la linea a 
procesar.
    If Token = '{' then
    begin
      Trash := TTrashLine.Create;
      Trash.LineNumber := i;
      Trash.TrashType := 'MC';//MC = MultiComentario
      FTrashList.Add(Trash);
      //Si ya termine de utilizar la variable TRASH, por que al decirle 
TRASH.Destroy en la lista se almacenan valores distintos a los que le entre?
      if Line[length(Line)] <> '}' then
      begin
        k := i;
        repeat
        {si el primer caracter es "{" quiere decir que a partir de ahi lo que 
vienen son comentarios, por lo tanto, marco desde ese simbolo hasta que 
encuentre "}"}
          inc(k);//voy a la proxima linea para analizarla...
          Line := LinesOfCode.Strings[k];
          Token := Copy(Line,length(Line),1);
          if Token <> '}' then
          begin
            Trash := TTrashLine.Create;
            Trash.LineNumber := k;
            Trash.TrashType := 'MC';
            FTrashList.Add(Trash);//Lista con las lineas que no me interesa 
analizar.
          end;
        until (Token = '}') or (k = LinesOfCode.Count - 1);//repit hasta que el
ultimo carater de la linea analizada sea "}"
{pero como en ese momento termine el ciclo, no he almacenado la linea
ultima, y es por eso que fuera del ciclo la guardo.}
        Trash := TTrashLine.Create;
        Trash.LineNumber := k;
        Trash.TrashType := 'MC';
        FTrashList.Add(Trash);
      end;
    end;
  end;
end;

Hasta ahora eso es loq ue tengo hecho. Pero que sucede.. que una linea logica puede ser dividida en 2 o mas lineas fisicas cuando pasa esto:

1.- Se hace referencia a una instruccion muy larga(ejemplo antes citado, Por ejemplo esto:
TClase(MiObjeto.MiFuncion[6].Propiedad1).Elemento[3].Text := TObjeto.Propiedad1.Parametro[Objeto.Propiedad2.Index].Value;
)
2.- Sentencia IF con condiciones muy largas. La solucion que propongo es buscar la palabra THEN y contar todo lo anterior como una sola linea.

P.Ej:

If (TClase(OBjeto).propiedad1.parametro = valor) and (TClase(Objeto).propiedad2.valor = valor) and (Objeto.propiedad3 = 3) then....

3.- EN una linea hay parentesis o cualquiero otro signo que tiene igual uncion que el parentesis o "[" con muchos parametros dentro.

4.- un for, while o repeat... until con muchas condicionales y muy largo.

5. - declaracion de USes muy largas.

Estos son mi sproblemas!!!!
__________________
Muchas Gracias...
Responder Con Cita