Módulo:ConvertirAuxEste módulo no tiene página de documentación[crear]
-- 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 centenas) o (toneladas cortas y centenas)
-- Admite un intervalo de entrada, que se convierte en un intervalo de salida
-- (pueden escribirse ambos en el campo [1], separados por uno de los cuatro caracteres siguientes: (''x'' ''y'' ''-'' ó ''a'')
-- Admite tríos de datos en el campo [1], separados por una pareja de los caracteres anteriores
-- Admite separador " " o "-" en el campo [1] cuando el parámetro [op=n] (no opera la expresión)
-- Además:
-- --La plantilla Convertir/ud permite definir nuevas unidades de forma más sencilla y compacta; incluyendo las relaciones numéricas entre ellas
local ConvertirAux = {}
--Declaración de variables globales
FFRR = {} --Matriz en la que se vuelcan los datos del frame
vv = {} --Matriz de los 7 parámetros de unidad leídos de Convert/ud (separados por !)
uu = {} --Matriz de las unidades de salida múltiples en [3] (separadas por blancos)
zz = {} --Matriz con la unidad [1] cortada en bloques (separadas por blancos)
ib =0 --número de elementos de la matriz en la que se almacene el corte entre blancos
ff0 = {} --Matriz con los elementos de la fórmula de conversión de la unidad origen
ffz = {} --Matriz con los elementos de la fórmula de conversión de la unidad destino
ii0 =0 --número de elementos de la matriz ff0
iiz =0 --número de elementos de la matriz ffz
IZ =0 --Número de elementos guardados en la matriz zz
IU =0 --número de unidades de salida
I1 =1 --Posición inicial del valor a leer [1]
I2 =2 --Posición inicial del valor a leer [2]
I3 =3 --Posición inicial del valor a leer [3]
I4 =4 --Posición inicial del valor a leer [4]
II =1 --Controla el bucle de IU cuando hay varias unidades de salida (I3 múltiple)
CASOUD="" --NO0 NO1 NO2 NO3 Y NO4 para quitar los paréntesis de cola y cabeza y los separadores en su caso
FORMULA0="" --Conversión de la unidad de origen guardada en Convertir/ud (campos 6 y 7)
FORMULAZ="" --Conversión de la unidad de destino guardada en Convertir/ud (campos 6 y 7)
FRAC="" --Indica si la medida se ha introducido con una expresión es fraccional
SALIDA="" --Valor que devuelve la rutina
function ConvertirAux.CONVTOT(frame)
--Volcado del frame
FFRR[1]=frame.args[1]
FFRR[2]=frame.args[2]
FFRR[3]=frame.args[3]
FFRR[4]=frame.args[4]
FFRR[5]=frame.args[5]
FFRR[6]=frame.args[6]
--Limpieza previa salvo, que op=n
if frame.args["op"]~="n" then
--Sustitución de guiones largos (char(8722)) por guiones normales (-) en FFRR[1]
FFRR[1]=FFRR[1]:gsub(mw.ustring.char(8722), "-")
--Reordenación de valores para el caso del campo [1] doble o triple:
dobleuno (FFRR[1])
end
--Reordenación de valores para el caso de que la precisión aparezca en el campo [5] (se permuta con el [6])
if tonumber(FFRR[5])~= nil then
FFRR[5],FFRR[6]=FFRR[6],FFRR[5]
end
--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])
if (tonumber(FFRR[3])~= nil and FFRR[4]=="") then
FFRR[3],FFRR[4]=FFRR[4],FFRR[3]
end
--CASO DE FORMATO DEL CAMPO 1 INDEFINIDO CON op=n (sin operar)
if frame.args["op"]=="n" then
divideuno (FFRR[1])
IZ=ib
--Casos correctos e incorrectos de divideuno:
K1=tonumber(quitacoma(fraccion(FFRR[1])))
K3=tonumber(quitacoma(fraccion(FFRR[3])))
if ((IZ==1 and K1==nil) or (IZ==2 and (K1==nil or K3==nil)) or IZ>2) then
-- Casos incorrectos (se calculan aquí):
-- Tratamiento previo de separadores:
FFRR[1]=frame.args[1]
FFRR[1]=" "..FFRR[1].." "
FFRR[1]=FFRR[1]:gsub("; "," ; ") --sustituir cada "; " por un " ; "
FFRR[1]=FFRR[1]:gsub(", "," , ") --sustituir cada ", " por un " , "
FFRR[1]=FFRR[1]:gsub(": "," : ") --sustituir cada ": " por un " : "
FFRR[1]=FFRR[1]:gsub("/"," / ") --sustituir cada "/" por un " / "
FFRR[1]=FFRR[1]:gsub(" "," ") --sustituir cada " " por un " "
--Separación en bloques
cortarblanco (FFRR[1], zz)
SALIDA=""
FFRR[1]=frame.args[1];FFRR[2]=frame.args[2]
FFRR[3]=frame.args[3];FFRR[4]=frame.args[4]
FFRR[5]=frame.args[5];FFRR[6]=frame.args[6]
for i=1,ib do
K1=tonumber(quitacoma(zz[i]))
if K1==nil then
SALIDA=SALIDA..zz[i].." "
else
FFRR[1]=quitacoma(zz[i])
SALIDA=SALIDA..UNIDAD1(frame)..UNIDAD2(frame).." "
end
end
-- Tratamiento posterior de separadores:
SALIDA=trim1(SALIDA)
SALIDA=SALIDA:gsub(" ;",";") --sustituir cada " ;" por un ";"
SALIDA=SALIDA:gsub(" ,",",") --sustituir cada " ," por un ","
SALIDA=SALIDA:gsub(" :",":") --sustituir cada " :" por un ":"
SALIDA=SALIDA:gsub(" / ","/") --sustituir cada " / " por un "/"
SALIDA=SALIDA:gsub(" "," ") --sustituir cada " " por un " "
SALIDA=SALIDA:gsub(" "," ") --sustituir cada " " por un " "
else
--Casos correctos (pasan desde aquí a la rutina general)
SALIDA=""
FFRR[1]=frame.args[1];FFRR[2]=frame.args[2]
FFRR[3]=frame.args[3];FFRR[4]=frame.args[4]
FFRR[5]=frame.args[5];FFRR[6]=frame.args[6]
divideuno (FFRR[1])
end
end
if SALIDA=="" then
--Lectura de los campos 2, 3 y 4 para determinar el tipo de entrada:
local K2= FFRR[2]
local K3= FFRR[3]
local K4= FFRR[4]
local KD= frame.args["disp"]
local KSALIDA=""
local KSALIDA1=""
IU=1
--Cálculo de IU, para detectar si hay varias unidades de salida declaradas:
if (K3 ~= "" and K3 ~= nil) then cortarblanco (K3, uu);IU=ib ;end
--Cálculo de K3 para ver si es un número; en caso afirmativo; IU=1
if tonumber(uu[1])~=nil then IU=1 end
-- Caso de varias salidas declaradas y una sola entrada:
if (IU > 1 and tonumber(FFRR[1])~= nil) then
local KSALIDA="; "
--Llamada a la funcion local UNIDAD1
SALIDA= UNIDAD1(frame)
--Bucle con las llamadas a UNIDAD2
for i=1,IU do
II=i
CASOUD="NO3"
if II==1 then CASOUD="NO0" end
if II==IU then CASOUD="NO2";KSALIDA="" end
SALIDA=SALIDA..UNIDAD2(frame)..KSALIDA
end
else
-- Caso entrada doble con ft[2] + in[4]:
if (K2=="ft" and K4=="in") then
I1=1; I2=2
SALIDA=UNIDAD1(frame)
I1=3; I2=4;
SALIDA=SALIDA..UNIDAD1(frame)
I1=1; I2=2; I3=5; I4=6;
SALIDA=SALIDA..UNIDAD2(frame)
-- Caso entrada doble con mi[2] + ch[4]:
elseif (K2=="mi" and K4=="ch") then
I1=1; I2=2
SALIDA=UNIDAD1(frame)
I1=3; I2=4;
SALIDA=SALIDA..UNIDAD1(frame)
I1=1; I2=2; I3=5; I4=6;
SALIDA=SALIDA..UNIDAD2(frame)
-- Caso entrada doble con mi[2] + yd[4]:
elseif (K2=="mi" and K4=="yd") then
I1=1; I2=2
SALIDA=UNIDAD1(frame)
I1=3; I2=4;
SALIDA=SALIDA..UNIDAD1(frame)
I1=1; I2=2; I3=5; I4=6;
SALIDA=SALIDA..UNIDAD2(frame)
-- Caso entrada doble con LT[2] + Lcwt[4]:
elseif (K2=="LT" and K4=="Lcwt") then
I1=1; I2=2
SALIDA=UNIDAD1(frame)
I1=3; I2=4;
SALIDA=SALIDA..UNIDAD1(frame)
I1=1; I2=2; I3=5; I4=6;
SALIDA=SALIDA..UNIDAD2(frame)
-- Caso entrada doble con ST[2] + Scwt[4]:
elseif (K2=="ST" and K4=="Scwt") then
I1=1; I2=2
SALIDA=UNIDAD1(frame)
I1=3; I2=4;
SALIDA=SALIDA..UNIDAD1(frame)
I1=1; I2=2; I3=5; I4=6;
SALIDA=SALIDA..UNIDAD2(frame)
-- Caso con intervalos dobles o triples de entrada (y de salida):
elseif (K2=="-" or K2=="and" or K2=="to" or K2=="to(-)" or K2=="hasta" or K2=="y" or K2=="x" or K2=="X" or K2=="by" or K2=="por" or K2=="a" or K2==";" or K2=="/") then
I1=1; I2=4; CASOUD="NO"
SALIDA=UNIDAD1(frame)
KSALIDA=""
if K2=="-" then KSALIDA="-" end
if (K2=="and" or K2=="y") then KSALIDA=" y " end
if (K2=="x" or K2=="X") then KSALIDA=" x " end
if (K2=="by" or K2=="por") then KSALIDA=" por " end
if (K2=="to" or K2=="to(-)" or K2=="a" or K2=="hasta") then KSALIDA=" a " end
if K2==";" then KSALIDA="; " end
if K2=="/" then KSALIDA="/" end
KSALIDA1=KSALIDA
if (KD ~= "" and KD ~= nil) then KSALIDA1="" end
SALIDA=SALIDA..KSALIDA1
--Caso con entrada triple
if FFRR[7]~= nil then
I1=7; I2=4; CASOUD="NO"
SALIDA=SALIDA..UNIDAD1(frame)..KSALIDA1
end
I1=3; I2=4; CASOUD=""
SALIDA=SALIDA..UNIDAD1(frame)
--Cálculo de IU, para detectar si hay varias unidades de salida declaradas:
cortarblanco (FFRR[5], uu);IU=ib
--Bucle con las llamadas a UNIDAD2
for i=1,IU do
if i>1 then SALIDA=SALIDA.." " end
II=i
I1=1; I2=4; I3=5; I4=6; CASOUD="NO1"
SALIDA=SALIDA..UNIDAD2(frame)
SALIDA=SALIDA..KSALIDA
--Caso con entrada triple
if FFRR[7]~= nil then
I1=7; I2=4; I3=5; I4=6; CASOUD="NO4"
SALIDA=SALIDA..UNIDAD2(frame)..KSALIDA1
end
I1=3; I2=4; I3=5; I4=6; CASOUD="NO2"
SALIDA=SALIDA..UNIDAD2(frame)
end
-- Caso normal:
else
--Llamada a las funciones locales UNIDAD1 y UNIDAD2
SALIDA= UNIDAD1(frame)..UNIDAD2(frame)
end
end
end
return SALIDA
end
function UNIDAD1(frame)
--Función que representa la primera unidad:
--Variables
local kunidadA=""
local kunidadB=""
local kunidad1=""
--Carga de variables desde frame
local kmed= tonumber(quitacoma(fraccion(FFRR[I1]))) --para evitar problemas si el decimal de entrada se pone con coma
local kuni0= FFRR[I2]
local kdisp= frame.args["disp"]
local klk= frame.args["lk"]
local ksing= frame.args["sing"]
local kabr= tonumber(frame.args["abr"])
local kabbr=frame.args["abbr"]
-- Llamada a Convertir/ud:
local kuni=frame:expandTemplate{ title = "es:Convertir/ud", args = {kuni0} }
-- Ver casos:
-- Si disp está activado, no se representa:
if (kdisp== nil or kdisp== "" or kdisp=="/" or kdisp=="br" or kdisp=="table") then
cortar(kuni) --Cortar kuni
kunidadB=vv[3]
-- Singular si sing es distinto de "" y de nil:
if (ksing ~= nil and ksing ~= "") then
kunidadB=vv[2]
else
-- Singular además si la unidad es igual a 1
if kmed==1 then kunidadB=vv[2] end
-- Singular además si la medida es una fracción
if FRAC~= "" then kunidadB="de "..vv[2] end
end
-- Si está abreviado, se pone la abreviatura:
if kabr== 1 or kabr==3 then kunidadB=vv[4] end
if kabbr=="on" then kunidadB=vv[4] end
-- Linkado activado o no:
if (klk ~= nil and klk ~= "" and klk~="off" and klk ~= "2") then
kunidad1="[["..vv[1].."|"..kunidadB.."]]"
else
kunidad1=kunidadB
end
-- Casos en que se quita la denominación de la unidad:
if (CASOUD=="NO" or kdisp=="table") then kunidad1=""; CASOUD=""; end
-- Llamada a formatnum:
kmed=frame:expandTemplate{ title = "es:formatnum", args = {kmed} }
kmed=kmed:gsub("-","−") --sustituir cada "-" (corto) por un "−" (largo)
-- Caso de fracción:
if kunidad1~="" then kunidad1=" "..kunidad1.." " end
if FRAC~= "" then
kunidad1=FRAC..kunidad1
else
kunidad1=kmed..kunidad1
end
-- Caso ftin y table:
if (FFRR[2]=="ft" and FFRR[4]=="in" and kdisp=="table") then
if I1==1 then kunidad1=kmed.."'" end
if I1==3 then kunidad1=" "..kmed..string.char(34) end
end
end
return kunidad1
end
function UNIDAD2(frame)
--Función que representa la segunda unidad:
--Variables
local kunidadA=""
local kunidadB=""
local kunidad1=""
--Carga de variables desde frame
local kmed= tonumber(quitacoma(fraccion(FFRR[I1])))
local kuni0= FFRR[I2]
local kuniz= FFRR[I3]
local kprec= FFRR[I4]
if kprec ~= nil then kprec= tonumber(kprec) end
--Caso de varias unidades de salida declaradas:
if IU >1 then kuniz=uu[II] end
--Caso de entrada en (ft + in):
if (I3== 5 and FFRR[2]=="ft") then
kmed= kmed + (tonumber(quitacoma(fraccion(FFRR[3]))))/12
end
--Caso de entrada en (mi + ch):
if (I3== 5 and FFRR[2]=="mi" and FFRR=="ch") then
kmed= kmed + (tonumber(quitacoma(fraccion(FFRR[3]))))/80
end
--Caso de entrada en (mi + yd):
if (I3== 5 and FFRR[2]=="mi" and FFRR[4]=="yd") then
kmed= kmed + (tonumber(quitacoma(fraccion(FFRR[3]))))/1760
end
--Caso de entrada en (LT + Lcwt):
if (I3== 5 and FFRR[2]=="LT" and FFRR[4]=="Lcwt") then
kmed= kmed + (tonumber(quitacoma(fraccion(FFRR[3]))))/20
end
--Caso de entrada en (ST + Scwt):
if (I3== 5 and FFRR[2]=="ST" and FFRR[4]=="Scwt") then
kmed= kmed + (tonumber(quitacoma(fraccion(FFRR[3]))))/20
end
if kprec==nil then kprec=1 end
local klk= frame.args["lk"]
local ksing= frame.args["sing"]
local kabr= tonumber(frame.args["abr"])
local kabbr=frame.args["abbr"]
local kdisp=frame.args["disp"]
-- Búsqueda de la unidad por defecto si kuniz no se ha declarado:
if (kuniz=="" or kuniz==nil) then
-- Llamada a Convertir/ud:
local kuni=frame:expandTemplate{ title = "es:Convertir/ud", args = {kuni0} }
cortar(kuni) --Cortar kuni
kuniz=vv[5]
end
-- Conversión y cálculo de unidades:
local base0="" --Unidad de referencia del origen
local basez="" --Unidad de referencia del destino
--Unidad 0:
cortar(frame:expandTemplate{ title = "es:Convertir/ud", args = {kuni0} })
FORMULA0=vv [6]; base0=vv [7]
--Unidad Z:
cortar(frame:expandTemplate{ title = "es:Convertir/ud", args = {kuniz} })
FORMULAZ=vv [6]; basez=vv [7]
if base0 ~= basez then kuniz = "UNIDADES INCOMPATIBLES" end
kmedz= calcular (kmed, FORMULA0, FORMULAZ)
-- Llamada a Convertir/ud:
local kuni=frame:expandTemplate{ title = "es:Convertir/ud", args = {kuniz} }
-- Ver casos:
--Según disp=
local kapert=""
if kdisp=="br" then kapert="<br />(" end
if kdisp=="table" then kapert="||" end
if (kdisp==nil or kdisp=="") then kapert="(" end
if kdisp=="/" then kapert="/" end
if kdisp=="2[" then kapert="[" end
--Se quita la apertura en la segunda llamada del caso 2-2:
if (CASOUD=="NO2" or CASOUD=="NO3") then kapert="" end
cortar(kuni) --Cortar kuni
kunidadB=vv[3]
-- Singular si sing es distinto de "" y de nil:
if (ksing ~= nil and ksing ~= "") then
kunidadB=vv[2]
else
-- Singular además si la unidad es igual a 1
if kmed==1 then kunidadB=vv[2] end
end
-- Si está abreviado, se pone la abreviatura:
if (kabr== 2 or kabr== 3 or kabr== nil) then kunidadB=vv[4] end
if kabbr=="on" then kunidadB=vv[4] end
-- Linkado activado o no:
if (klk ~= nil and klk ~= "" and klk ~= "1") then
kunidad1="[["..vv[1].."|"..kunidadB.."]]"
else
kunidad1=kunidadB
end
-- Caso de una tabla:
if kdisp=="table" then kunidad1="" end
-- Caso especial de ftin:
if kuniz== "ftin" then
-- Llamada a ftin:
kmedz=frame:expandTemplate{ title = "es:ftin", args = {kmedz} }
kunidad1=""
elseif kuniz== "ydftin" then
-- Caso especial de ydftin:
-- Llamada a ydftin:
kmedz=frame:expandTemplate{ title = "es:ydftin", args = {kmedz} }
kunidad1=""
else
-- Llamada a decimales:
kmedz=frame:expandTemplate{ title = "es:Decimales", args = {kmedz, kprec} }
-- Llamada a formatnum:
kmedz=frame:expandTemplate{ title = "es:formatnum", args = {kmedz} }
kmedz=kmedz:gsub("-","−") --sustituir cada "-" (corto) por un "−" (largo)
end
local kcierre=""
if (kdisp==nil or kdisp=="" or kdisp=="br") then kcierre=")" end
if kdisp=="table" then kcierre="" end
if kdisp=="2[" then kcierre="]" end
--Se quitan el cierre y la unidad en la primera llamada del caso 2-2:
if (CASOUD=="NO0" or CASOUD=="NO1" or CASOUD=="NO3") then kcierre="" end
if CASOUD=="NO1" then kunidad1="" end
if CASOUD=="NO4" then kcierre=""; kapert="";kunidad1="" end
if (kdisp=="#" or kdisp=="numero") then
kunidad1=kmedz
else
if kunidad1 ~= "" then
kunidad1=kapert..kmedz.." "..kunidad1..kcierre
else
kunidad1=kapert..kmedz..kcierre
end
end
CASOUD=""
return kunidad1
end
-- Función para cortar una cadena con siete argumentos separados por ! procedente de la plantilla Convertir/ud
function cortar (s)
--Variables del bucle, y recortado del letrero, que se almacena en la matriz vv[]
local indice=7
local l=0
local cadena=""
local i=0
local name
--Preparación del letrero para recortarlo (trim y una barra de propina al final)
name= trim1(s)
name=name.."!"
--Bucle de recortado
for i=1,indice do
l= string.find(name, '!')
cadena=string.sub (name, 1, l-1)
name=string.sub (name,l+1)
vv[i]=trim1(cadena)
end
end
-- Función para cortar una cadena con un número variable de argumentos separados por blancos
function cortarblanco (s, ss)
--Variables del bucle, y recortado del letrero, que se almacena en la matriz ss[]
--local ss = {}
local indice=0
local cadena=s
local letra0=" "
local letra1=" "
while letra1 ~= "" do
letra1 = string.sub (cadena, 1, 1)
if (letra1 ~= " " and letra0 == " ") then indice=indice+1; ss[indice]="";end
if letra1 ~= " " then ss[indice]=ss[indice]..letra1; end
letra0=letra1
cadena=string.sub (cadena, 2)
end
ib=indice
end
-- Función para operar la conversión de medida -> origen -> destino a partir de FORMULA0 y FORMULAZ
function calcular (kmed, FORMULA0, FORMULAZ)
-- Contempla el caso de las temperaturas, en las que en la conversión se utilizan dos constantes (campo [2] = "+" o "-")
-- Contempla el caso de los consumos, donde hay unidades inversas (campo [2] = "/")
local kk0=1
local kkz=1
local CTE0=0
local CTEZ=0
local medicion=tonumber (kmed)
--Cortar las fórmulas y guardarlas
cortarblanco (FORMULA0, ff0)
ii0=ib
cortarblanco (FORMULAZ, ffz)
iiz=ib
--Poner constantes en orden:
kk0=tonumber(ff0[1])
if ii0==3 then
CTE0=tonumber(ff0[3])
if ff0[2]=="-" then CTE0=CTE0*-1; end
if ff0[2]=="/" then
medicion= 1/medicion
CTE0=0
end
end
--CONVERSIÓN 1 (origen a base):
medicion= (medicion + CTE0) * kk0
kkz=tonumber(ffz[1])
if iiz==3 then
CTEZ=tonumber(ffz[3])
if ffz[2]=="-" then CTEZ=CTEZ*-1; end
if ffz[2]=="/" then
medicion= 1/medicion
CTEZ=0
kkz=1/kkz
end
end
--CONVERSIÓN 2 (base a destino):
medicion= medicion/kkz - CTEZ
return medicion
end
-- 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
function quitacoma (s)
local l=string.len(s)
local cadena=""
local i=0
local letra=""
local ultima=0
for i=l,1,-1 do
letra=string.sub (s, i, i)
if letra==" " then letra="" end
if (ultima==1 and letra==".") then letra="" end
if (ultima==0 and letra==",") then letra="."; ultima=1; end
cadena=letra..cadena
end
s=cadena
return s
end
-- Función para convertir el dato de entrada de fracción (2 3/5 por ejemplo) a un solo número
function fraccion (s)
local ww = {}
local l=string.len(s)
local cadena=s
local i=0
local letra=""
local entero="0"
local numerador=""
local denominador=""
local n=1
--Sustituir cada "+" por un blanco
cadena=cadena:gsub("+"," ")
cortarblanco (cadena, ww) -- Se analiza si la cadena tiene un campo (n/m) o dos campos (a b/c)
if ib==2 then
entero=ww[1]
cadena=ww[2]
end
for i=1,l,1 do
letra=string.sub (cadena, 1, 1)
if letra=="/" then
n=2
else
if n==1 then
numerador=numerador..letra
else
denominador=denominador..letra
end
end
cadena=string.sub (cadena, 2)
end
--Se controla que entero, numerador y denominador sean números correctos:
if (tonumber(numerador) ~= nil and tonumber(denominador) ~= nil and tonumber(entero) ~= nil) then
cadena=tostring(tonumber(entero)+(tonumber(numerador)/tonumber(denominador)))
FRAC=s
else
cadena=s
FRAC=""
end
s=cadena
return s
end
--Función para subdividir el campo 1 si es doble (caso habitual, con separador):
function dobleuno(s)
local ww = {}
local l=string.len(s)
local cadena=trim1(s)
local cadena1=""
local i=0
local contador=0
local letra=""
for i=1,l do
letra=string.sub (cadena, i, i)
if (letra=="-" or letra=="a" or letra=="x" or letra=="y" or letra==";") then
if (i>1 and contador==0) then
contador=1
letra=" "..letra.." "
end
end
cadena1=cadena1..letra
end
-- Se analiza si la cadena1 tiene tres campos y un separador correcto
-- Se reasignan los campos de FFRR
cortarblanco (cadena1, ww)
-- Caso doble
if ib==3 then
if (ww[2]=="-" or ww[2]=="a" or ww[2]=="x" or ww[2]=="y" or ww[2]==";" or ww[2]=="/") then
FFRR[6]=FFRR[4]
FFRR[5]=FFRR[3]
FFRR[4]=FFRR[2]
FFRR[1]=ww[1]
FFRR[2]=ww[2]
FFRR[3]=ww[3]
end
end
-- Caso triple
if ib==5 then
if ((ww[2]=="-" or ww[2]=="a" or ww[2]=="x" or ww[2]=="y" or ww[2]==";" or ww[2]=="/") and (ww[2]==ww[4])) then
FFRR[6]=FFRR[4]
FFRR[5]=FFRR[3]
FFRR[4]=FFRR[2]
FFRR[1]=ww[1]
FFRR[2]=ww[2]
FFRR[3]=ww[5]
FFRR[7]=ww[3]
end
end
return
end
--Función para subdividir el campo 1 si es doble (caso sin separador o separador /) cuando op=n::
function divideuno(s)
local ww = {}
local l=string.len(s)
local cadena=trim1(s)
local cadena1=""
local i=0
local contador=0
local letra=""
-- Se separan los sumandos y se cambian comas por puntos
for i=1,l do
letra=string.sub (cadena, i, i)
if (letra=="-" or letra=="+") then
letra=" "..letra
end
if letra=="," then letra="." end
if letra=="/" then letra=" " end
cadena1=cadena1..letra
end
-- Se corta la cadena
cortarblanco (cadena1, ww)
-- Se analiza si la cadena1 tiene dos campos
-- Se reasignan los campos de FFRR
cortarblanco (cadena1, ww)
if ib==2 then
FFRR[6]=FFRR[4]
FFRR[5]=FFRR[3]
FFRR[4]=FFRR[2]
FFRR[1]=ww[1]
FFRR[2]="/"
FFRR[3]=ww[2]
end
return
end
--Función milagrosa que quita blancos (detrás y delante)
function trim1(s)
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
return ConvertirAux
Information related to Módulo:ConvertirAux |
Index:
pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve