Difference between revisions of "Alfabetizar un campo correctamente"

From ABCD Wiki
Jump to: navigation, search
(Página creada con «Si un campo posee espacios o signos de puntuación al inicio (como por ejemplo los títulos) estos caracteres causan que la lista de términos de presente clasificada de ma...»)
 
Line 35: Line 35:
 
     ''' else
 
     ''' else
 
             e1:=e1+1 '''
 
             e1:=e1+1 '''
 +
 +
      '''Note que todo el algoritmo está encerrado entre paréntesis
 +
      para procesar correctamente cada ocurrencia del campo repetible'''
  
 
Como al editar la fst no se deben generar varias líneas lo correcto sería colocar al algoritmo de la siguiente manera:
 
Como al editar la fst no se deben generar varias líneas lo correcto sería colocar al algoritmo de la siguiente manera:

Revision as of 23:06, 1 October 2019

Si un campo posee espacios o signos de puntuación al inicio (como por ejemplo los títulos) estos caracteres causan que la lista de términos de presente clasificada de manera inapropiada. Para una correcta alfabetización es necesario eliminar los caracteres no deseados que se encuentran al inicio del campo.

Se presenta entonces el siguiente algoritmo, basado en el lenguaje de formatos, el cual suprime aquellos caracteres que se encuentran al inicio del campo y pueden afectar la alfabetización:

     (e1:=1,/
      e2:=size(v12),/  
      while e1<=e2 (/
           if 'ABCDEFDGHJKLMNOPQRSTUVWXYZ':mid(s(mpu,v12),e1,1)   
                 then 
                     'TT_',mid(v12,e1,e2),/ , 
                      e1:=e2+1, 
                 else
                      e1:=e1+1 
          fi)/
      )

Explicación:

Partiendo del inicio del campo

    e1:=1 

y conociendo la longitud del mismo

    e2:=size(v12) 

se recorre todos los caracteres del campo

    while e1<=e2 (/  

y se van extrayendo de uno en uno

    mid(s(mpu,v12),e1,1) 

se compara entonces cada caracter extraído contra la lista de caracteres que consideramos válidos para el inicio del campo

    if 'ABCDEFDGHJKLMNOPQRSTUVWXYZ1234567890':mid(s(mpu,v12),e1,1) 

Si el caracter extraído está en la lista, entonces obtenemos la subcadena que comienza con el primer caracter considerado válido y le agregamos el prefijo correspondiente

    then 
           'TT_',mid(v12,e1,e2),/ ,

Y terminamos el ciclo

            e1:=e2+1, 

Si el caracter extraído no está en la lista vamos a la siguiente posición y continuamos con el ciclo

     else
            e1:=e1+1 
     Note que todo el algoritmo está encerrado entre paréntesis 
      para procesar correctamente cada ocurrencia del campo repetible

Como al editar la fst no se deben generar varias líneas lo correcto sería colocar al algoritmo de la siguiente manera:

(e1:=1,/e2:=size(v12),/ while e1<=e2 (/if 'ABCDEFDGHJKLMNOPQRSTUVWXYZ':mid(s(mpu,v12),e1,1) then 'TT_',mid(v12,e1,e2),/ , e1:=e2+1, else e1:=e1+1 fi)/)

Es decir, eliminando los saltos de línea.

Si queremos eliminar las comillas que puedan quedar en el campo y evitar posibles errores de sintaxis, en lugar de

      'TT_',mid(v12,e1,e2)

podemos colocar

      'TT_',replace(mid(v12,e1,e2),'"',)