Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Portada
mantenimiento
Páginas nuevas
Página aleatoria
Cambios recientes
Páginas especiales
Ayuda
Comunidad
Portal de la comunidad
Centro de reportes
Tablón de solicitudes
Tutorial de edición
Políticas
Buscar
Buscar
Apariencia
Crear una cuenta
Acceder
Herramientas personales
Crear una cuenta
Acceder
Páginas para editores desconectados
más información
Contribuciones
Discusión
Edición de «
Módulo:ConvertirAux
»
Módulo
Discusión
English
Leer
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar código
Ver historial
Actualizar
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Enlace corto
En otros proyectos
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
-- 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
Resumen:
Ten en cuenta que todas las contribuciones a Netxipedia se consideran publicadas bajo la Creative Commons Atribución-CompartirIgual (véase
Netxipedia:Derechos de autor
para más información). Si no deseas que las modifiquen sin limitaciones y las distribuyan libremente, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre.
¡No uses textos con copyright sin permiso!
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Plantilla usada en esta página:
Módulo:ConvertirAux/doc
(
editar
)
Buscar
Buscar
Edición de «
Módulo:ConvertirAux
»
Añadir tema