<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://guanches.org/index.php?action=history&amp;feed=atom&amp;title=M%C3%B3dulo%3AConvertirAux</id>
	<title>Módulo:ConvertirAux - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://guanches.org/index.php?action=history&amp;feed=atom&amp;title=M%C3%B3dulo%3AConvertirAux"/>
	<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=M%C3%B3dulo:ConvertirAux&amp;action=history"/>
	<updated>2026-04-17T12:41:21Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://guanches.org/index.php?title=M%C3%B3dulo:ConvertirAux&amp;diff=218348&amp;oldid=prev</id>
		<title>Atamankad: Página creada con «-- Módulo diseñado para ampliar las funcionalidades de la plantilla convertir, admitiendo la mayor parte de las entradas de la función convert en inglés  -- Admite no declarar la segunda unidad (conversiones con variable por defecto) -- Admite salida en pies y pulgadas; y en yardas, pies y pulgadas -- Admite varias unidades de destino simultáneamente -- Admite entradas separando (pies y pulgadas), (millas y yardas), (millas y cadenas), (toneladas largas y centena…»</title>
		<link rel="alternate" type="text/html" href="https://guanches.org/index.php?title=M%C3%B3dulo:ConvertirAux&amp;diff=218348&amp;oldid=prev"/>
		<updated>2026-02-11T15:29:44Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «-- Módulo diseñado para ampliar las funcionalidades de la plantilla convertir, admitiendo la mayor parte de las entradas de la función convert en inglés  -- Admite no declarar la segunda unidad (conversiones con variable por defecto) -- Admite salida en pies y pulgadas; y en yardas, pies y pulgadas -- Admite varias unidades de destino simultáneamente -- Admite entradas separando (pies y pulgadas), (millas y yardas), (millas y cadenas), (toneladas largas y centena…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Módulo diseñado para ampliar las funcionalidades de la plantilla convertir, admitiendo la mayor parte de las entradas de la función convert en inglés &lt;br /&gt;
-- Admite no declarar la segunda unidad (conversiones con variable por defecto)&lt;br /&gt;
-- Admite salida en pies y pulgadas; y en yardas, pies y pulgadas&lt;br /&gt;
-- Admite varias unidades de destino simultáneamente&lt;br /&gt;
-- Admite entradas separando (pies y pulgadas), (millas y yardas), (millas y cadenas), (toneladas largas y centenas) o (toneladas cortas y centenas) &lt;br /&gt;
-- Admite un intervalo de entrada, que se convierte en un intervalo de salida &lt;br /&gt;
-- (pueden escribirse ambos en el campo [1], separados por uno de los cuatro caracteres siguientes: (&amp;#039;&amp;#039;x&amp;#039;&amp;#039; &amp;#039;&amp;#039;y&amp;#039;&amp;#039; &amp;#039;&amp;#039;-&amp;#039;&amp;#039; ó &amp;#039;&amp;#039;a&amp;#039;&amp;#039;)&lt;br /&gt;
-- Admite tríos de datos en el campo [1], separados por una pareja de los caracteres anteriores&lt;br /&gt;
-- Admite separador &amp;quot; &amp;quot; o &amp;quot;-&amp;quot; en el campo [1] cuando el parámetro [op=n] (no opera la expresión)&lt;br /&gt;
-- Además:&lt;br /&gt;
-- --La plantilla Convertir/ud permite definir nuevas unidades de forma más sencilla y compacta; incluyendo las relaciones numéricas entre ellas&lt;br /&gt;
&lt;br /&gt;
local ConvertirAux = {}&lt;br /&gt;
 --Declaración de variables globales&lt;br /&gt;
   FFRR = {} --Matriz en la que se vuelcan los datos del frame&lt;br /&gt;
   vv = {} --Matriz de los 7 parámetros de unidad leídos de Convert/ud (separados por !)&lt;br /&gt;
   uu = {} --Matriz de las unidades de salida múltiples en [3] (separadas por blancos)&lt;br /&gt;
   zz = {} --Matriz con la unidad [1] cortada en bloques (separadas por blancos)&lt;br /&gt;
&lt;br /&gt;
   ib =0   --número de elementos de la matriz en la que se almacene el corte entre blancos&lt;br /&gt;
   ff0 = {} --Matriz con los elementos de la fórmula de conversión de la unidad origen&lt;br /&gt;
   ffz = {} --Matriz con los elementos de la fórmula de conversión de la unidad destino&lt;br /&gt;
   ii0 =0 --número de elementos de la matriz ff0&lt;br /&gt;
   iiz =0 --número de elementos de la matriz ffz&lt;br /&gt;
&lt;br /&gt;
   IZ =0   --Número de elementos guardados en la matriz zz&lt;br /&gt;
   IU =0   --número de unidades de salida&lt;br /&gt;
   I1 =1   --Posición inicial del valor a leer [1]&lt;br /&gt;
   I2 =2   --Posición inicial del valor a leer [2]&lt;br /&gt;
   I3 =3   --Posición inicial del valor a leer [3]&lt;br /&gt;
   I4 =4   --Posición inicial del valor a leer [4]&lt;br /&gt;
   II =1   --Controla el bucle de IU cuando hay varias unidades de salida (I3 múltiple)&lt;br /&gt;
   CASOUD=&amp;quot;&amp;quot; --NO0 NO1 NO2 NO3 Y NO4 para quitar los paréntesis de cola y cabeza y los separadores en su caso&lt;br /&gt;
   FORMULA0=&amp;quot;&amp;quot; --Conversión de la unidad de origen  guardada en Convertir/ud (campos 6 y 7)&lt;br /&gt;
   FORMULAZ=&amp;quot;&amp;quot; --Conversión de la unidad de destino guardada en Convertir/ud (campos 6 y 7)&lt;br /&gt;
   FRAC=&amp;quot;&amp;quot; --Indica si la medida se ha introducido con una expresión es fraccional&lt;br /&gt;
   SALIDA=&amp;quot;&amp;quot; --Valor que devuelve la rutina &lt;br /&gt;
&lt;br /&gt;
function ConvertirAux.CONVTOT(frame)&lt;br /&gt;
  --Volcado del frame&lt;br /&gt;
    FFRR[1]=frame.args[1]&lt;br /&gt;
    FFRR[2]=frame.args[2]&lt;br /&gt;
    FFRR[3]=frame.args[3]&lt;br /&gt;
    FFRR[4]=frame.args[4]&lt;br /&gt;
    FFRR[5]=frame.args[5]&lt;br /&gt;
    FFRR[6]=frame.args[6]&lt;br /&gt;
&lt;br /&gt;
--Limpieza previa salvo, que op=n&lt;br /&gt;
 if frame.args[&amp;quot;op&amp;quot;]~=&amp;quot;n&amp;quot; then&lt;br /&gt;
 --Sustitución de guiones largos (char(8722)) por guiones normales (-) en FFRR[1]&lt;br /&gt;
   FFRR[1]=FFRR[1]:gsub(mw.ustring.char(8722), &amp;quot;-&amp;quot;) &lt;br /&gt;
 --Reordenación de valores para el caso del campo [1] doble o triple:&lt;br /&gt;
   dobleuno (FFRR[1]) &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
--Reordenación de valores para el caso de que la precisión aparezca en el campo [5] (se permuta con el [6])&lt;br /&gt;
   if tonumber(FFRR[5])~= nil then &lt;br /&gt;
      FFRR[5],FFRR[6]=FFRR[6],FFRR[5]&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
--Reordenación de valores para el caso de que la precisión aparezca en el campo [3] y el campo 4 esté vacío (se permuta con el [4])&lt;br /&gt;
   if (tonumber(FFRR[3])~= nil and FFRR[4]==&amp;quot;&amp;quot;) then &lt;br /&gt;
      FFRR[3],FFRR[4]=FFRR[4],FFRR[3]&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
--CASO DE FORMATO DEL CAMPO 1 INDEFINIDO CON op=n (sin operar)&lt;br /&gt;
 if frame.args[&amp;quot;op&amp;quot;]==&amp;quot;n&amp;quot; then &lt;br /&gt;
    divideuno (FFRR[1])&lt;br /&gt;
    IZ=ib&lt;br /&gt;
   --Casos correctos e incorrectos de divideuno:&lt;br /&gt;
   K1=tonumber(quitacoma(fraccion(FFRR[1])))&lt;br /&gt;
   K3=tonumber(quitacoma(fraccion(FFRR[3])))&lt;br /&gt;
      &lt;br /&gt;
   if ((IZ==1 and K1==nil) or (IZ==2 and (K1==nil or K3==nil)) or IZ&amp;gt;2) then             &lt;br /&gt;
       -- Casos incorrectos (se calculan aquí):&lt;br /&gt;
       -- Tratamiento previo de separadores:&lt;br /&gt;
       FFRR[1]=frame.args[1]&lt;br /&gt;
       FFRR[1]=&amp;quot; &amp;quot;..FFRR[1]..&amp;quot; &amp;quot;&lt;br /&gt;
       FFRR[1]=FFRR[1]:gsub(&amp;quot;; &amp;quot;,&amp;quot; ; &amp;quot;) --sustituir cada &amp;quot;; &amp;quot; por un &amp;quot; ; &amp;quot;&lt;br /&gt;
       FFRR[1]=FFRR[1]:gsub(&amp;quot;, &amp;quot;,&amp;quot; , &amp;quot;) --sustituir cada &amp;quot;, &amp;quot; por un &amp;quot; , &amp;quot;&lt;br /&gt;
       FFRR[1]=FFRR[1]:gsub(&amp;quot;: &amp;quot;,&amp;quot; : &amp;quot;) --sustituir cada &amp;quot;: &amp;quot; por un &amp;quot; : &amp;quot;&lt;br /&gt;
       FFRR[1]=FFRR[1]:gsub(&amp;quot;/&amp;quot;,&amp;quot; / &amp;quot;)  --sustituir cada &amp;quot;/&amp;quot; por un &amp;quot; / &amp;quot;&lt;br /&gt;
       FFRR[1]=FFRR[1]:gsub(&amp;quot;&amp;amp;nbsp;&amp;quot;,&amp;quot; &amp;amp;nbsp; &amp;quot;)  --sustituir cada &amp;quot;&amp;amp;nbsp;&amp;quot; por un &amp;quot; &amp;amp;nbsp; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
       --Separación en bloques&lt;br /&gt;
       cortarblanco (FFRR[1], zz)&lt;br /&gt;
       SALIDA=&amp;quot;&amp;quot;&lt;br /&gt;
       FFRR[1]=frame.args[1];FFRR[2]=frame.args[2]&lt;br /&gt;
       FFRR[3]=frame.args[3];FFRR[4]=frame.args[4]&lt;br /&gt;
       FFRR[5]=frame.args[5];FFRR[6]=frame.args[6]&lt;br /&gt;
       for i=1,ib do                  &lt;br /&gt;
           K1=tonumber(quitacoma(zz[i]))&lt;br /&gt;
           if K1==nil then&lt;br /&gt;
              SALIDA=SALIDA..zz[i]..&amp;quot; &amp;quot;&lt;br /&gt;
           else&lt;br /&gt;
              FFRR[1]=quitacoma(zz[i])               &lt;br /&gt;
              SALIDA=SALIDA..UNIDAD1(frame)..UNIDAD2(frame)..&amp;quot; &amp;quot;&lt;br /&gt;
           end&lt;br /&gt;
       end&lt;br /&gt;
       -- Tratamiento posterior de separadores:&lt;br /&gt;
       SALIDA=trim1(SALIDA)&lt;br /&gt;
       SALIDA=SALIDA:gsub(&amp;quot; ;&amp;quot;,&amp;quot;;&amp;quot;) --sustituir cada &amp;quot; ;&amp;quot; por un &amp;quot;;&amp;quot;&lt;br /&gt;
       SALIDA=SALIDA:gsub(&amp;quot; ,&amp;quot;,&amp;quot;,&amp;quot;) --sustituir cada &amp;quot; ,&amp;quot; por un &amp;quot;,&amp;quot;&lt;br /&gt;
       SALIDA=SALIDA:gsub(&amp;quot; :&amp;quot;,&amp;quot;:&amp;quot;) --sustituir cada &amp;quot; :&amp;quot; por un &amp;quot;:&amp;quot;&lt;br /&gt;
       SALIDA=SALIDA:gsub(&amp;quot; / &amp;quot;,&amp;quot;/&amp;quot;)  --sustituir cada &amp;quot; / &amp;quot; por un &amp;quot;/&amp;quot;&lt;br /&gt;
       SALIDA=SALIDA:gsub(&amp;quot; &amp;amp;nbsp;&amp;quot;,&amp;quot;&amp;amp;nbsp;&amp;quot;)  --sustituir cada &amp;quot; &amp;amp;nbsp;&amp;quot; por un &amp;quot;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
       SALIDA=SALIDA:gsub(&amp;quot;&amp;amp;nbsp; &amp;quot;,&amp;quot;&amp;amp;nbsp;&amp;quot;)  --sustituir cada &amp;quot;&amp;amp;nbsp; &amp;quot; por un &amp;quot;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
   else&lt;br /&gt;
       --Casos correctos (pasan desde aquí a la rutina general)&lt;br /&gt;
       SALIDA=&amp;quot;&amp;quot;&lt;br /&gt;
       FFRR[1]=frame.args[1];FFRR[2]=frame.args[2]&lt;br /&gt;
       FFRR[3]=frame.args[3];FFRR[4]=frame.args[4]&lt;br /&gt;
       FFRR[5]=frame.args[5];FFRR[6]=frame.args[6]&lt;br /&gt;
       divideuno (FFRR[1])&lt;br /&gt;
   end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if SALIDA==&amp;quot;&amp;quot; then&lt;br /&gt;
  --Lectura de los campos 2, 3 y 4 para determinar el tipo de entrada:&lt;br /&gt;
    local K2= FFRR[2]&lt;br /&gt;
    local K3= FFRR[3]&lt;br /&gt;
    local K4= FFRR[4]&lt;br /&gt;
    local KD= frame.args[&amp;quot;disp&amp;quot;]&lt;br /&gt;
    local KSALIDA=&amp;quot;&amp;quot;&lt;br /&gt;
    local KSALIDA1=&amp;quot;&amp;quot;&lt;br /&gt;
    IU=1&lt;br /&gt;
&lt;br /&gt;
  --Cálculo de IU, para detectar si hay varias unidades de salida declaradas:&lt;br /&gt;
    if (K3 ~= &amp;quot;&amp;quot; and K3 ~= nil) then cortarblanco (K3, uu);IU=ib ;end&lt;br /&gt;
&lt;br /&gt;
  --Cálculo de K3 para ver si es un número; en caso afirmativo; IU=1&lt;br /&gt;
    if tonumber(uu[1])~=nil then IU=1 end&lt;br /&gt;
   &lt;br /&gt;
  -- Caso de varias salidas declaradas y una sola entrada:   &lt;br /&gt;
    if (IU &amp;gt; 1 and tonumber(FFRR[1])~= nil) then&lt;br /&gt;
      local KSALIDA=&amp;quot;; &amp;quot;  &lt;br /&gt;
      --Llamada a la funcion local UNIDAD1&lt;br /&gt;
      SALIDA= UNIDAD1(frame)&lt;br /&gt;
      --Bucle con las llamadas a UNIDAD2&lt;br /&gt;
      for i=1,IU do&lt;br /&gt;
          II=i&lt;br /&gt;
          CASOUD=&amp;quot;NO3&amp;quot; &lt;br /&gt;
          if II==1 then CASOUD=&amp;quot;NO0&amp;quot; end&lt;br /&gt;
          if II==IU then CASOUD=&amp;quot;NO2&amp;quot;;KSALIDA=&amp;quot;&amp;quot; end&lt;br /&gt;
          SALIDA=SALIDA..UNIDAD2(frame)..KSALIDA&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
    else&lt;br /&gt;
&lt;br /&gt;
  -- Caso entrada doble con ft[2] + in[4]:&lt;br /&gt;
    if (K2==&amp;quot;ft&amp;quot; and K4==&amp;quot;in&amp;quot;) then&lt;br /&gt;
     I1=1; I2=2&lt;br /&gt;
     SALIDA=UNIDAD1(frame)&lt;br /&gt;
     I1=3; I2=4;&lt;br /&gt;
     SALIDA=SALIDA..UNIDAD1(frame)&lt;br /&gt;
     I1=1; I2=2; I3=5; I4=6;&lt;br /&gt;
     SALIDA=SALIDA..UNIDAD2(frame)&lt;br /&gt;
&lt;br /&gt;
  -- Caso entrada doble con mi[2] + ch[4]:  &lt;br /&gt;
    elseif (K2==&amp;quot;mi&amp;quot; and K4==&amp;quot;ch&amp;quot;) then&lt;br /&gt;
     I1=1; I2=2&lt;br /&gt;
     SALIDA=UNIDAD1(frame)&lt;br /&gt;
     I1=3; I2=4;&lt;br /&gt;
     SALIDA=SALIDA..UNIDAD1(frame)&lt;br /&gt;
     I1=1; I2=2; I3=5; I4=6;&lt;br /&gt;
     SALIDA=SALIDA..UNIDAD2(frame)&lt;br /&gt;
&lt;br /&gt;
-- Caso entrada doble con mi[2] + yd[4]:  &lt;br /&gt;
    elseif (K2==&amp;quot;mi&amp;quot; and K4==&amp;quot;yd&amp;quot;) then&lt;br /&gt;
     I1=1; I2=2&lt;br /&gt;
     SALIDA=UNIDAD1(frame)&lt;br /&gt;
     I1=3; I2=4;&lt;br /&gt;
     SALIDA=SALIDA..UNIDAD1(frame)&lt;br /&gt;
     I1=1; I2=2; I3=5; I4=6;&lt;br /&gt;
     SALIDA=SALIDA..UNIDAD2(frame)&lt;br /&gt;
&lt;br /&gt;
-- Caso entrada doble con LT[2] + Lcwt[4]:  &lt;br /&gt;
    elseif (K2==&amp;quot;LT&amp;quot; and K4==&amp;quot;Lcwt&amp;quot;) then&lt;br /&gt;
     I1=1; I2=2&lt;br /&gt;
     SALIDA=UNIDAD1(frame)&lt;br /&gt;
     I1=3; I2=4;&lt;br /&gt;
     SALIDA=SALIDA..UNIDAD1(frame)&lt;br /&gt;
     I1=1; I2=2; I3=5; I4=6;&lt;br /&gt;
     SALIDA=SALIDA..UNIDAD2(frame)&lt;br /&gt;
&lt;br /&gt;
-- Caso entrada doble con ST[2] + Scwt[4]:  &lt;br /&gt;
    elseif (K2==&amp;quot;ST&amp;quot; and K4==&amp;quot;Scwt&amp;quot;) then&lt;br /&gt;
     I1=1; I2=2&lt;br /&gt;
     SALIDA=UNIDAD1(frame)&lt;br /&gt;
     I1=3; I2=4;&lt;br /&gt;
     SALIDA=SALIDA..UNIDAD1(frame)&lt;br /&gt;
     I1=1; I2=2; I3=5; I4=6;&lt;br /&gt;
     SALIDA=SALIDA..UNIDAD2(frame)&lt;br /&gt;
 &lt;br /&gt;
 -- Caso con intervalos dobles o triples de entrada (y de salida):&lt;br /&gt;
    elseif (K2==&amp;quot;-&amp;quot; or K2==&amp;quot;and&amp;quot; or K2==&amp;quot;to&amp;quot; or K2==&amp;quot;to(-)&amp;quot; or K2==&amp;quot;hasta&amp;quot; or K2==&amp;quot;y&amp;quot; or K2==&amp;quot;x&amp;quot; or K2==&amp;quot;X&amp;quot; or K2==&amp;quot;by&amp;quot; or K2==&amp;quot;por&amp;quot; or K2==&amp;quot;a&amp;quot; or K2==&amp;quot;;&amp;quot; or K2==&amp;quot;/&amp;quot;) then&lt;br /&gt;
&lt;br /&gt;
     I1=1; I2=4; CASOUD=&amp;quot;NO&amp;quot;&lt;br /&gt;
     SALIDA=UNIDAD1(frame)&lt;br /&gt;
&lt;br /&gt;
     KSALIDA=&amp;quot;&amp;quot;&lt;br /&gt;
     if K2==&amp;quot;-&amp;quot; then KSALIDA=&amp;quot;-&amp;quot; end&lt;br /&gt;
     if (K2==&amp;quot;and&amp;quot; or K2==&amp;quot;y&amp;quot;) then KSALIDA=&amp;quot; y &amp;quot; end&lt;br /&gt;
     if (K2==&amp;quot;x&amp;quot; or K2==&amp;quot;X&amp;quot;) then KSALIDA=&amp;quot; x &amp;quot; end&lt;br /&gt;
     if (K2==&amp;quot;by&amp;quot; or K2==&amp;quot;por&amp;quot;) then KSALIDA=&amp;quot; por &amp;quot; end&lt;br /&gt;
     if (K2==&amp;quot;to&amp;quot; or K2==&amp;quot;to(-)&amp;quot; or K2==&amp;quot;a&amp;quot; or K2==&amp;quot;hasta&amp;quot;) then KSALIDA=&amp;quot; a &amp;quot; end&lt;br /&gt;
     if K2==&amp;quot;;&amp;quot; then KSALIDA=&amp;quot;; &amp;quot; end&lt;br /&gt;
     if K2==&amp;quot;/&amp;quot; then KSALIDA=&amp;quot;/&amp;quot; end&lt;br /&gt;
     KSALIDA1=KSALIDA&lt;br /&gt;
     if (KD ~= &amp;quot;&amp;quot; and KD ~= nil) then KSALIDA1=&amp;quot;&amp;quot; end&lt;br /&gt;
     SALIDA=SALIDA..KSALIDA1&lt;br /&gt;
&lt;br /&gt;
     --Caso con entrada triple&lt;br /&gt;
     if FFRR[7]~= nil then&lt;br /&gt;
        I1=7; I2=4; CASOUD=&amp;quot;NO&amp;quot; &lt;br /&gt;
        SALIDA=SALIDA..UNIDAD1(frame)..KSALIDA1&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
     I1=3; I2=4; CASOUD=&amp;quot;&amp;quot;&lt;br /&gt;
     SALIDA=SALIDA..UNIDAD1(frame)&lt;br /&gt;
    &lt;br /&gt;
   --Cálculo de IU, para detectar si hay varias unidades de salida declaradas:&lt;br /&gt;
    cortarblanco (FFRR[5], uu);IU=ib&lt;br /&gt;
&lt;br /&gt;
   --Bucle con las llamadas a UNIDAD2&lt;br /&gt;
     for i=1,IU do&lt;br /&gt;
        if i&amp;gt;1 then SALIDA=SALIDA..&amp;quot; &amp;quot; end&lt;br /&gt;
        II=i&lt;br /&gt;
        I1=1; I2=4; I3=5; I4=6; CASOUD=&amp;quot;NO1&amp;quot;&lt;br /&gt;
        SALIDA=SALIDA..UNIDAD2(frame)&lt;br /&gt;
        SALIDA=SALIDA..KSALIDA&lt;br /&gt;
&lt;br /&gt;
        --Caso con entrada triple&lt;br /&gt;
        if FFRR[7]~= nil then&lt;br /&gt;
           I1=7; I2=4; I3=5; I4=6; CASOUD=&amp;quot;NO4&amp;quot;&lt;br /&gt;
           SALIDA=SALIDA..UNIDAD2(frame)..KSALIDA1&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        I1=3; I2=4; I3=5; I4=6; CASOUD=&amp;quot;NO2&amp;quot;&lt;br /&gt;
        SALIDA=SALIDA..UNIDAD2(frame)&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
-- Caso normal:&lt;br /&gt;
    else&lt;br /&gt;
  --Llamada a las funciones locales UNIDAD1 y UNIDAD2&lt;br /&gt;
    SALIDA= UNIDAD1(frame)..UNIDAD2(frame)  &lt;br /&gt;
    end&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return SALIDA&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function UNIDAD1(frame)&lt;br /&gt;
   --Función que representa la primera unidad:&lt;br /&gt;
   --Variables&lt;br /&gt;
     local kunidadA=&amp;quot;&amp;quot;&lt;br /&gt;
     local kunidadB=&amp;quot;&amp;quot;&lt;br /&gt;
     local kunidad1=&amp;quot;&amp;quot;&lt;br /&gt;
   --Carga de variables desde frame&lt;br /&gt;
     local kmed= tonumber(quitacoma(fraccion(FFRR[I1]))) --para evitar problemas si el decimal de entrada se pone con coma&lt;br /&gt;
     local kuni0= FFRR[I2]&lt;br /&gt;
     local kdisp= frame.args[&amp;quot;disp&amp;quot;]&lt;br /&gt;
     local klk= frame.args[&amp;quot;lk&amp;quot;]&lt;br /&gt;
     local ksing= frame.args[&amp;quot;sing&amp;quot;]&lt;br /&gt;
     local kabr= tonumber(frame.args[&amp;quot;abr&amp;quot;])&lt;br /&gt;
     local kabbr=frame.args[&amp;quot;abbr&amp;quot;]&lt;br /&gt;
   -- Llamada a Convertir/ud:&lt;br /&gt;
     local kuni=frame:expandTemplate{ title = &amp;quot;es:Convertir/ud&amp;quot;, args = {kuni0} }      &lt;br /&gt;
   -- Ver casos:&lt;br /&gt;
      -- Si disp está activado, no se representa:&lt;br /&gt;
      if (kdisp== nil or kdisp== &amp;quot;&amp;quot; or kdisp==&amp;quot;/&amp;quot; or kdisp==&amp;quot;br&amp;quot; or kdisp==&amp;quot;table&amp;quot;) then&lt;br /&gt;
         cortar(kuni) --Cortar kuni&lt;br /&gt;
         kunidadB=vv[3]&lt;br /&gt;
         -- Singular si sing es distinto de &amp;quot;&amp;quot; y de nil:&lt;br /&gt;
           if (ksing ~= nil and ksing ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
              kunidadB=vv[2]&lt;br /&gt;
           else &lt;br /&gt;
           -- Singular además si la unidad es igual a 1&lt;br /&gt;
              if kmed==1 then kunidadB=vv[2] end&lt;br /&gt;
           -- Singular además si la medida es una fracción&lt;br /&gt;
              if FRAC~= &amp;quot;&amp;quot; then kunidadB=&amp;quot;de &amp;quot;..vv[2] end&lt;br /&gt;
           end&lt;br /&gt;
         -- Si está abreviado, se pone la abreviatura:&lt;br /&gt;
            if kabr== 1 or kabr==3 then kunidadB=vv[4] end&lt;br /&gt;
            if kabbr==&amp;quot;on&amp;quot;  then kunidadB=vv[4] end&lt;br /&gt;
         -- Linkado activado o no:&lt;br /&gt;
           if (klk ~= nil and klk ~= &amp;quot;&amp;quot; and klk~=&amp;quot;off&amp;quot; and klk ~= &amp;quot;2&amp;quot;) then&lt;br /&gt;
              kunidad1=&amp;quot;[[&amp;quot;..vv[1]..&amp;quot;|&amp;quot;..kunidadB..&amp;quot;]]&amp;quot;&lt;br /&gt;
           else&lt;br /&gt;
              kunidad1=kunidadB &lt;br /&gt;
           end&lt;br /&gt;
        -- Casos en que se quita la denominación de la unidad:&lt;br /&gt;
           if (CASOUD==&amp;quot;NO&amp;quot; or kdisp==&amp;quot;table&amp;quot;) then kunidad1=&amp;quot;&amp;quot;; CASOUD=&amp;quot;&amp;quot;; end  &lt;br /&gt;
        -- Llamada a formatnum:     &lt;br /&gt;
           kmed=frame:expandTemplate{ title = &amp;quot;es:formatnum&amp;quot;, args = {kmed} }&lt;br /&gt;
           kmed=kmed:gsub(&amp;quot;-&amp;quot;,&amp;quot;−&amp;quot;) --sustituir cada &amp;quot;-&amp;quot; (corto) por un &amp;quot;−&amp;quot; (largo)&lt;br /&gt;
        -- Caso de fracción:&lt;br /&gt;
           if kunidad1~=&amp;quot;&amp;quot; then kunidad1=&amp;quot;&amp;amp;nbsp;&amp;quot;..kunidad1..&amp;quot; &amp;quot; end&lt;br /&gt;
           if FRAC~= &amp;quot;&amp;quot; then&lt;br /&gt;
              kunidad1=FRAC..kunidad1&lt;br /&gt;
           else&lt;br /&gt;
              kunidad1=kmed..kunidad1&lt;br /&gt;
           end&lt;br /&gt;
        -- Caso ftin y table:&lt;br /&gt;
           if (FFRR[2]==&amp;quot;ft&amp;quot; and FFRR[4]==&amp;quot;in&amp;quot; and kdisp==&amp;quot;table&amp;quot;) then&lt;br /&gt;
              if I1==1 then kunidad1=kmed..&amp;quot;&amp;#039;&amp;quot;  end&lt;br /&gt;
              if I1==3 then kunidad1=&amp;quot; &amp;quot;..kmed..string.char(34) end&lt;br /&gt;
           end&lt;br /&gt;
      end&lt;br /&gt;
    return kunidad1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function UNIDAD2(frame)&lt;br /&gt;
   --Función que representa la segunda unidad:&lt;br /&gt;
   --Variables&lt;br /&gt;
     local kunidadA=&amp;quot;&amp;quot;&lt;br /&gt;
     local kunidadB=&amp;quot;&amp;quot;&lt;br /&gt;
     local kunidad1=&amp;quot;&amp;quot;&lt;br /&gt;
   --Carga de variables desde frame&lt;br /&gt;
     local kmed= tonumber(quitacoma(fraccion(FFRR[I1])))&lt;br /&gt;
     local kuni0= FFRR[I2]&lt;br /&gt;
     local kuniz= FFRR[I3]&lt;br /&gt;
     local kprec= FFRR[I4]&lt;br /&gt;
     if kprec ~= nil then kprec= tonumber(kprec) end&lt;br /&gt;
 &lt;br /&gt;
   --Caso de varias unidades de salida declaradas:&lt;br /&gt;
     if IU &amp;gt;1 then kuniz=uu[II] end&lt;br /&gt;
     &lt;br /&gt;
   --Caso de entrada en (ft + in):&lt;br /&gt;
     if (I3== 5 and FFRR[2]==&amp;quot;ft&amp;quot;) then&lt;br /&gt;
        kmed= kmed + (tonumber(quitacoma(fraccion(FFRR[3]))))/12&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
   --Caso de entrada en (mi + ch):&lt;br /&gt;
     if (I3== 5 and FFRR[2]==&amp;quot;mi&amp;quot; and FFRR==&amp;quot;ch&amp;quot;) then&lt;br /&gt;
        kmed= kmed + (tonumber(quitacoma(fraccion(FFRR[3]))))/80&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
   --Caso de entrada en (mi + yd):&lt;br /&gt;
     if (I3== 5 and FFRR[2]==&amp;quot;mi&amp;quot; and FFRR[4]==&amp;quot;yd&amp;quot;) then&lt;br /&gt;
        kmed= kmed + (tonumber(quitacoma(fraccion(FFRR[3]))))/1760&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
   --Caso de entrada en (LT + Lcwt):&lt;br /&gt;
     if (I3== 5 and FFRR[2]==&amp;quot;LT&amp;quot; and FFRR[4]==&amp;quot;Lcwt&amp;quot;) then&lt;br /&gt;
        kmed= kmed + (tonumber(quitacoma(fraccion(FFRR[3]))))/20&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
   --Caso de entrada en (ST + Scwt):&lt;br /&gt;
     if (I3== 5 and FFRR[2]==&amp;quot;ST&amp;quot; and FFRR[4]==&amp;quot;Scwt&amp;quot;) then&lt;br /&gt;
        kmed= kmed + (tonumber(quitacoma(fraccion(FFRR[3]))))/20&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
     if kprec==nil then kprec=1 end&lt;br /&gt;
     local klk= frame.args[&amp;quot;lk&amp;quot;]&lt;br /&gt;
     local ksing= frame.args[&amp;quot;sing&amp;quot;]&lt;br /&gt;
     local kabr= tonumber(frame.args[&amp;quot;abr&amp;quot;])&lt;br /&gt;
     local kabbr=frame.args[&amp;quot;abbr&amp;quot;]&lt;br /&gt;
     local kdisp=frame.args[&amp;quot;disp&amp;quot;]&lt;br /&gt;
  -- Búsqueda de la unidad por defecto si kuniz no se ha declarado:&lt;br /&gt;
     if (kuniz==&amp;quot;&amp;quot; or kuniz==nil) then&lt;br /&gt;
     -- Llamada a Convertir/ud:&lt;br /&gt;
        local kuni=frame:expandTemplate{ title = &amp;quot;es:Convertir/ud&amp;quot;, args = {kuni0} }        &lt;br /&gt;
        cortar(kuni) --Cortar kuni&lt;br /&gt;
        kuniz=vv[5]&lt;br /&gt;
     end&lt;br /&gt;
  -- Conversión y cálculo de unidades:&lt;br /&gt;
     local base0=&amp;quot;&amp;quot; --Unidad de referencia del origen&lt;br /&gt;
     local basez=&amp;quot;&amp;quot; --Unidad de referencia del destino&lt;br /&gt;
     --Unidad 0:&lt;br /&gt;
     cortar(frame:expandTemplate{ title = &amp;quot;es:Convertir/ud&amp;quot;, args = {kuni0} })&lt;br /&gt;
     FORMULA0=vv [6]; base0=vv [7]&lt;br /&gt;
     --Unidad Z:&lt;br /&gt;
     cortar(frame:expandTemplate{ title = &amp;quot;es:Convertir/ud&amp;quot;, args = {kuniz} })&lt;br /&gt;
     FORMULAZ=vv [6]; basez=vv [7]&lt;br /&gt;
     if base0 ~= basez then kuniz = &amp;quot;UNIDADES INCOMPATIBLES&amp;quot; end&lt;br /&gt;
     kmedz= calcular (kmed, FORMULA0, FORMULAZ)    &lt;br /&gt;
  -- Llamada a Convertir/ud:&lt;br /&gt;
     local kuni=frame:expandTemplate{ title = &amp;quot;es:Convertir/ud&amp;quot;, args = {kuniz} }&lt;br /&gt;
&lt;br /&gt;
   -- Ver casos:&lt;br /&gt;
     --Según disp=&lt;br /&gt;
     local kapert=&amp;quot;&amp;quot;&lt;br /&gt;
     if kdisp==&amp;quot;br&amp;quot; then kapert=&amp;quot;&amp;lt;br /&amp;gt;(&amp;quot; end&lt;br /&gt;
     if kdisp==&amp;quot;table&amp;quot; then kapert=&amp;quot;||&amp;quot; end&lt;br /&gt;
     if (kdisp==nil or kdisp==&amp;quot;&amp;quot;) then kapert=&amp;quot;(&amp;quot; end&lt;br /&gt;
     if kdisp==&amp;quot;/&amp;quot; then kapert=&amp;quot;/&amp;quot; end&lt;br /&gt;
     if kdisp==&amp;quot;2[&amp;quot; then kapert=&amp;quot;[&amp;quot; end&lt;br /&gt;
    --Se quita la apertura en la segunda llamada del caso 2-2:&lt;br /&gt;
     if (CASOUD==&amp;quot;NO2&amp;quot; or CASOUD==&amp;quot;NO3&amp;quot;) then kapert=&amp;quot;&amp;quot; end&lt;br /&gt;
&lt;br /&gt;
     cortar(kuni) --Cortar kuni&lt;br /&gt;
     kunidadB=vv[3]&lt;br /&gt;
     -- Singular si sing es distinto de &amp;quot;&amp;quot; y de nil:&lt;br /&gt;
       if (ksing ~= nil and ksing ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
          kunidadB=vv[2]&lt;br /&gt;
       else &lt;br /&gt;
       -- Singular además si la unidad es igual a 1&lt;br /&gt;
          if kmed==1 then kunidadB=vv[2] end&lt;br /&gt;
       end&lt;br /&gt;
     -- Si está abreviado, se pone la abreviatura:&lt;br /&gt;
        if (kabr== 2 or kabr== 3 or kabr== nil) then kunidadB=vv[4] end&lt;br /&gt;
        if kabbr==&amp;quot;on&amp;quot;  then kunidadB=vv[4] end&lt;br /&gt;
     -- Linkado activado o no:&lt;br /&gt;
       if (klk ~= nil and klk ~= &amp;quot;&amp;quot; and klk ~= &amp;quot;1&amp;quot;) then&lt;br /&gt;
          kunidad1=&amp;quot;[[&amp;quot;..vv[1]..&amp;quot;|&amp;quot;..kunidadB..&amp;quot;]]&amp;quot;&lt;br /&gt;
       else&lt;br /&gt;
          kunidad1=kunidadB &lt;br /&gt;
       end&lt;br /&gt;
     -- Caso de una tabla:&lt;br /&gt;
        if kdisp==&amp;quot;table&amp;quot;  then kunidad1=&amp;quot;&amp;quot; end&lt;br /&gt;
&lt;br /&gt;
    -- Caso especial de ftin:&lt;br /&gt;
       if kuniz== &amp;quot;ftin&amp;quot; then&lt;br /&gt;
           -- Llamada a ftin:&lt;br /&gt;
              kmedz=frame:expandTemplate{ title = &amp;quot;es:ftin&amp;quot;, args = {kmedz} }&lt;br /&gt;
              kunidad1=&amp;quot;&amp;quot;&lt;br /&gt;
       elseif kuniz== &amp;quot;ydftin&amp;quot; then&lt;br /&gt;
    -- Caso especial de ydftin:&lt;br /&gt;
           -- Llamada a ydftin:&lt;br /&gt;
              kmedz=frame:expandTemplate{ title = &amp;quot;es:ydftin&amp;quot;, args = {kmedz} }&lt;br /&gt;
              kunidad1=&amp;quot;&amp;quot;    &lt;br /&gt;
       else &lt;br /&gt;
           -- Llamada a decimales:&lt;br /&gt;
              kmedz=frame:expandTemplate{ title = &amp;quot;es:Decimales&amp;quot;, args = {kmedz, kprec} }&lt;br /&gt;
           -- Llamada a formatnum:     &lt;br /&gt;
              kmedz=frame:expandTemplate{ title = &amp;quot;es:formatnum&amp;quot;, args = {kmedz} }&lt;br /&gt;
              kmedz=kmedz:gsub(&amp;quot;-&amp;quot;,&amp;quot;−&amp;quot;) --sustituir cada &amp;quot;-&amp;quot; (corto) por un &amp;quot;−&amp;quot; (largo)&lt;br /&gt;
       end&lt;br /&gt;
       local kcierre=&amp;quot;&amp;quot;&lt;br /&gt;
       if (kdisp==nil or kdisp==&amp;quot;&amp;quot; or kdisp==&amp;quot;br&amp;quot;) then kcierre=&amp;quot;)&amp;quot; end&lt;br /&gt;
       if kdisp==&amp;quot;table&amp;quot; then kcierre=&amp;quot;&amp;quot; end&lt;br /&gt;
       if kdisp==&amp;quot;2[&amp;quot; then kcierre=&amp;quot;]&amp;quot; end&lt;br /&gt;
     --Se quitan el cierre y la unidad en la primera llamada del caso 2-2:&lt;br /&gt;
       if (CASOUD==&amp;quot;NO0&amp;quot; or CASOUD==&amp;quot;NO1&amp;quot; or CASOUD==&amp;quot;NO3&amp;quot;) then kcierre=&amp;quot;&amp;quot; end&lt;br /&gt;
       if  CASOUD==&amp;quot;NO1&amp;quot; then kunidad1=&amp;quot;&amp;quot; end&lt;br /&gt;
       if  CASOUD==&amp;quot;NO4&amp;quot; then kcierre=&amp;quot;&amp;quot;; kapert=&amp;quot;&amp;quot;;kunidad1=&amp;quot;&amp;quot; end&lt;br /&gt;
&lt;br /&gt;
       if (kdisp==&amp;quot;#&amp;quot; or kdisp==&amp;quot;numero&amp;quot;) then &lt;br /&gt;
           kunidad1=kmedz&lt;br /&gt;
       else&lt;br /&gt;
           if kunidad1 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
              kunidad1=kapert..kmedz..&amp;quot;&amp;amp;nbsp;&amp;quot;..kunidad1..kcierre&lt;br /&gt;
           else&lt;br /&gt;
              kunidad1=kapert..kmedz..kcierre&lt;br /&gt;
           end&lt;br /&gt;
       end&lt;br /&gt;
    CASOUD=&amp;quot;&amp;quot;&lt;br /&gt;
    return kunidad1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Función para cortar una cadena con siete argumentos separados por ! procedente de la plantilla Convertir/ud&lt;br /&gt;
function cortar (s)&lt;br /&gt;
   --Variables del bucle, y recortado del letrero, que se almacena en la matriz vv[]&lt;br /&gt;
   local indice=7&lt;br /&gt;
   local l=0&lt;br /&gt;
   local cadena=&amp;quot;&amp;quot;&lt;br /&gt;
   local i=0&lt;br /&gt;
   local name&lt;br /&gt;
   --Preparación del letrero para recortarlo (trim y una barra de propina al final)&lt;br /&gt;
   name= trim1(s)&lt;br /&gt;
   name=name..&amp;quot;!&amp;quot;&lt;br /&gt;
   --Bucle de recortado&lt;br /&gt;
   for i=1,indice do&lt;br /&gt;
      l= string.find(name, &amp;#039;!&amp;#039;)&lt;br /&gt;
      cadena=string.sub (name, 1, l-1)&lt;br /&gt;
      name=string.sub (name,l+1)&lt;br /&gt;
      vv[i]=trim1(cadena)&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Función para cortar una cadena con un número variable de argumentos separados por blancos &lt;br /&gt;
function cortarblanco (s, ss)&lt;br /&gt;
   --Variables del bucle, y recortado del letrero, que se almacena en la matriz ss[]&lt;br /&gt;
   --local ss = {} &lt;br /&gt;
   local indice=0 &lt;br /&gt;
   local cadena=s&lt;br /&gt;
   local letra0=&amp;quot; &amp;quot;&lt;br /&gt;
   local letra1=&amp;quot; &amp;quot; &lt;br /&gt;
   while letra1 ~= &amp;quot;&amp;quot; do&lt;br /&gt;
         letra1 = string.sub (cadena, 1, 1)&lt;br /&gt;
         if (letra1 ~= &amp;quot; &amp;quot; and letra0 == &amp;quot; &amp;quot;) then indice=indice+1; ss[indice]=&amp;quot;&amp;quot;;end&lt;br /&gt;
         if letra1 ~= &amp;quot; &amp;quot; then ss[indice]=ss[indice]..letra1; end&lt;br /&gt;
         letra0=letra1&lt;br /&gt;
         cadena=string.sub (cadena, 2)&lt;br /&gt;
   end&lt;br /&gt;
   ib=indice&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Función para operar la conversión de medida -&amp;gt; origen -&amp;gt; destino a partir de FORMULA0  y FORMULAZ&lt;br /&gt;
function calcular (kmed, FORMULA0, FORMULAZ)&lt;br /&gt;
   -- Contempla el caso de las temperaturas, en las que en la conversión se utilizan dos constantes (campo [2] = &amp;quot;+&amp;quot; o &amp;quot;-&amp;quot;)&lt;br /&gt;
   -- Contempla el caso de los consumos, donde hay unidades inversas (campo [2] = &amp;quot;/&amp;quot;)  &lt;br /&gt;
   local kk0=1&lt;br /&gt;
   local kkz=1&lt;br /&gt;
   local CTE0=0&lt;br /&gt;
   local CTEZ=0&lt;br /&gt;
   local medicion=tonumber (kmed)&lt;br /&gt;
&lt;br /&gt;
   --Cortar las fórmulas y guardarlas&lt;br /&gt;
     cortarblanco (FORMULA0, ff0)&lt;br /&gt;
     ii0=ib&lt;br /&gt;
     cortarblanco (FORMULAZ, ffz)&lt;br /&gt;
     iiz=ib&lt;br /&gt;
    --Poner constantes en orden:&lt;br /&gt;
     kk0=tonumber(ff0[1])&lt;br /&gt;
     if ii0==3 then&lt;br /&gt;
        CTE0=tonumber(ff0[3])&lt;br /&gt;
        if ff0[2]==&amp;quot;-&amp;quot; then CTE0=CTE0*-1; end&lt;br /&gt;
        if ff0[2]==&amp;quot;/&amp;quot; then &lt;br /&gt;
           medicion= 1/medicion&lt;br /&gt;
           CTE0=0&lt;br /&gt;
        end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
     --CONVERSIÓN 1 (origen a base):&lt;br /&gt;
     medicion= (medicion + CTE0) * kk0 &lt;br /&gt;
    &lt;br /&gt;
     kkz=tonumber(ffz[1])&lt;br /&gt;
     if iiz==3 then&lt;br /&gt;
        CTEZ=tonumber(ffz[3])&lt;br /&gt;
        if ffz[2]==&amp;quot;-&amp;quot; then CTEZ=CTEZ*-1; end&lt;br /&gt;
        if ffz[2]==&amp;quot;/&amp;quot; then &lt;br /&gt;
           medicion= 1/medicion&lt;br /&gt;
           CTEZ=0&lt;br /&gt;
           kkz=1/kkz &lt;br /&gt;
        end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
     --CONVERSIÓN 2 (base a destino):&lt;br /&gt;
     medicion= medicion/kkz - CTEZ &lt;br /&gt;
 &lt;br /&gt;
   return medicion &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Función para cambiar coma por punto, y quitar puntos sobrantes (en caso de notación 5.255,4). Empieza por detrás, y también quita blancos intercalados&lt;br /&gt;
function quitacoma (s)&lt;br /&gt;
   local l=string.len(s)&lt;br /&gt;
   local cadena=&amp;quot;&amp;quot;&lt;br /&gt;
   local i=0&lt;br /&gt;
   local letra=&amp;quot;&amp;quot;&lt;br /&gt;
   local ultima=0&lt;br /&gt;
   for i=l,1,-1 do&lt;br /&gt;
       letra=string.sub (s, i, i)&lt;br /&gt;
       if letra==&amp;quot; &amp;quot; then letra=&amp;quot;&amp;quot; end&lt;br /&gt;
       if (ultima==1 and letra==&amp;quot;.&amp;quot;) then letra=&amp;quot;&amp;quot; end&lt;br /&gt;
       if (ultima==0 and letra==&amp;quot;,&amp;quot;) then letra=&amp;quot;.&amp;quot;; ultima=1; end&lt;br /&gt;
       cadena=letra..cadena&lt;br /&gt;
   end &lt;br /&gt;
   s=cadena&lt;br /&gt;
   return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Función para convertir el dato de entrada de fracción (2 3/5 por ejemplo) a un solo número&lt;br /&gt;
function fraccion (s)&lt;br /&gt;
   local ww = {}&lt;br /&gt;
   local l=string.len(s)&lt;br /&gt;
   local cadena=s&lt;br /&gt;
   local i=0&lt;br /&gt;
   local letra=&amp;quot;&amp;quot;&lt;br /&gt;
   local entero=&amp;quot;0&amp;quot;&lt;br /&gt;
   local numerador=&amp;quot;&amp;quot;&lt;br /&gt;
   local denominador=&amp;quot;&amp;quot;&lt;br /&gt;
   local n=1&lt;br /&gt;
&lt;br /&gt;
   --Sustituir cada &amp;quot;+&amp;quot; por un blanco&lt;br /&gt;
   cadena=cadena:gsub(&amp;quot;+&amp;quot;,&amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
   cortarblanco (cadena, ww) -- Se analiza si la cadena tiene un campo (n/m) o dos campos (a b/c)&lt;br /&gt;
   if ib==2 then&lt;br /&gt;
      entero=ww[1]&lt;br /&gt;
      cadena=ww[2]&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   for i=1,l,1 do&lt;br /&gt;
       letra=string.sub (cadena, 1, 1)&lt;br /&gt;
       if letra==&amp;quot;/&amp;quot; then&lt;br /&gt;
          n=2 &lt;br /&gt;
       else&lt;br /&gt;
          if n==1 then &lt;br /&gt;
             numerador=numerador..letra&lt;br /&gt;
          else&lt;br /&gt;
             denominador=denominador..letra&lt;br /&gt;
          end       &lt;br /&gt;
       end&lt;br /&gt;
       cadena=string.sub (cadena, 2)&lt;br /&gt;
   end &lt;br /&gt;
   --Se controla que entero, numerador y denominador sean números correctos:&lt;br /&gt;
   if (tonumber(numerador) ~= nil and tonumber(denominador) ~= nil and tonumber(entero) ~= nil) then&lt;br /&gt;
      cadena=tostring(tonumber(entero)+(tonumber(numerador)/tonumber(denominador)))&lt;br /&gt;
      FRAC=s&lt;br /&gt;
   else&lt;br /&gt;
      cadena=s&lt;br /&gt;
      FRAC=&amp;quot;&amp;quot; &lt;br /&gt;
   end&lt;br /&gt;
   s=cadena&lt;br /&gt;
   return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--Función para subdividir el campo 1 si es doble (caso habitual, con separador):&lt;br /&gt;
function dobleuno(s)&lt;br /&gt;
   local ww = {}&lt;br /&gt;
   local l=string.len(s)&lt;br /&gt;
   local cadena=trim1(s)&lt;br /&gt;
   local cadena1=&amp;quot;&amp;quot;&lt;br /&gt;
   local i=0&lt;br /&gt;
   local contador=0&lt;br /&gt;
   local letra=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   for i=1,l do&lt;br /&gt;
       letra=string.sub (cadena, i, i)&lt;br /&gt;
       if (letra==&amp;quot;-&amp;quot; or letra==&amp;quot;a&amp;quot; or letra==&amp;quot;x&amp;quot; or letra==&amp;quot;y&amp;quot; or letra==&amp;quot;;&amp;quot;) then&lt;br /&gt;
           if (i&amp;gt;1 and contador==0) then&lt;br /&gt;
              contador=1&lt;br /&gt;
              letra=&amp;quot; &amp;quot;..letra..&amp;quot; &amp;quot; &lt;br /&gt;
           end  &lt;br /&gt;
       end&lt;br /&gt;
       cadena1=cadena1..letra&lt;br /&gt;
   end &lt;br /&gt;
   &lt;br /&gt;
   -- Se analiza si la cadena1 tiene tres campos y un separador correcto&lt;br /&gt;
   -- Se reasignan los campos de FFRR&lt;br /&gt;
   cortarblanco (cadena1, ww) &lt;br /&gt;
   -- Caso doble &lt;br /&gt;
   if ib==3 then&lt;br /&gt;
      if (ww[2]==&amp;quot;-&amp;quot; or ww[2]==&amp;quot;a&amp;quot; or ww[2]==&amp;quot;x&amp;quot; or ww[2]==&amp;quot;y&amp;quot; or ww[2]==&amp;quot;;&amp;quot; or ww[2]==&amp;quot;/&amp;quot;) then&lt;br /&gt;
        FFRR[6]=FFRR[4]&lt;br /&gt;
        FFRR[5]=FFRR[3]&lt;br /&gt;
        FFRR[4]=FFRR[2]&lt;br /&gt;
        FFRR[1]=ww[1]&lt;br /&gt;
        FFRR[2]=ww[2]&lt;br /&gt;
        FFRR[3]=ww[3]&lt;br /&gt;
      end&lt;br /&gt;
   end&lt;br /&gt;
   -- Caso triple&lt;br /&gt;
   if ib==5 then&lt;br /&gt;
      if ((ww[2]==&amp;quot;-&amp;quot; or ww[2]==&amp;quot;a&amp;quot; or ww[2]==&amp;quot;x&amp;quot; or ww[2]==&amp;quot;y&amp;quot; or ww[2]==&amp;quot;;&amp;quot; or ww[2]==&amp;quot;/&amp;quot;) and (ww[2]==ww[4])) then&lt;br /&gt;
        FFRR[6]=FFRR[4]&lt;br /&gt;
        FFRR[5]=FFRR[3]&lt;br /&gt;
        FFRR[4]=FFRR[2]&lt;br /&gt;
        FFRR[1]=ww[1]&lt;br /&gt;
        FFRR[2]=ww[2]&lt;br /&gt;
        FFRR[3]=ww[5]&lt;br /&gt;
        FFRR[7]=ww[3]&lt;br /&gt;
      end&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
  return&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Función para subdividir el campo 1 si es doble (caso sin separador o separador /) cuando op=n::&lt;br /&gt;
function divideuno(s)&lt;br /&gt;
   local ww = {}&lt;br /&gt;
   local l=string.len(s)&lt;br /&gt;
   local cadena=trim1(s)&lt;br /&gt;
   local cadena1=&amp;quot;&amp;quot;&lt;br /&gt;
   local i=0&lt;br /&gt;
   local contador=0&lt;br /&gt;
   local letra=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   -- Se separan los sumandos y se cambian comas por puntos&lt;br /&gt;
   for i=1,l do&lt;br /&gt;
       letra=string.sub (cadena, i, i)&lt;br /&gt;
       if (letra==&amp;quot;-&amp;quot; or letra==&amp;quot;+&amp;quot;) then&lt;br /&gt;
              letra=&amp;quot; &amp;quot;..letra &lt;br /&gt;
       end&lt;br /&gt;
       if letra==&amp;quot;,&amp;quot; then letra=&amp;quot;.&amp;quot; end&lt;br /&gt;
       if letra==&amp;quot;/&amp;quot; then letra=&amp;quot; &amp;quot; end&lt;br /&gt;
       cadena1=cadena1..letra&lt;br /&gt;
   end &lt;br /&gt;
&lt;br /&gt;
   -- Se corta la cadena&lt;br /&gt;
   cortarblanco (cadena1, ww) &lt;br /&gt;
   &lt;br /&gt;
   -- Se analiza si la cadena1 tiene dos campos&lt;br /&gt;
   -- Se reasignan los campos de FFRR&lt;br /&gt;
   cortarblanco (cadena1, ww) &lt;br /&gt;
   if ib==2 then&lt;br /&gt;
        FFRR[6]=FFRR[4]&lt;br /&gt;
        FFRR[5]=FFRR[3]&lt;br /&gt;
        FFRR[4]=FFRR[2]&lt;br /&gt;
        FFRR[1]=ww[1]&lt;br /&gt;
        FFRR[2]=&amp;quot;/&amp;quot;&lt;br /&gt;
        FFRR[3]=ww[2]&lt;br /&gt;
   end&lt;br /&gt;
  return&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Función milagrosa que quita blancos (detrás y delante)&lt;br /&gt;
function trim1(s)&lt;br /&gt;
   return (s:gsub(&amp;quot;^%s*(.-)%s*$&amp;quot;, &amp;quot;%1&amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return ConvertirAux&lt;/div&gt;</summary>
		<author><name>Atamankad</name></author>
	</entry>
</feed>