Skip to content

Latest commit

 

History

History
213 lines (156 loc) · 5.7 KB

LEEME.funciones.md

File metadata and controls

213 lines (156 loc) · 5.7 KB

Funciones de la biblioteca jdva

jsonLstm(json, lista)

Crea una lista multidimensional partiendo de un texto en formato JSON.

Argumentos

  • json (1) Puntero a una cadena de texto en formato JSON. Es decir, una lista unidimensional de un sólo elemento cuyo índice es 0, y su valor es una cadena de texto JSON.

  • lista Lista multidimensional donde la función jsonLstm almacena los valores, y la estructura, del texto en formato JSON de entrada.

Ejemplo:

$ echo "[{\"nombre\": \"alfa\",\"edad\": 34}, {\"nombre\": \"beta\", \"edad\": 36}]" |
> gawk -i bbl_jdva.awk '{
>   cad_json[0]=$0;
>   jsonLstm(cad_json, lista);
>   pinta(lista);
> }'
[1][nombre] = "alfa"
[1][edad] = 34
[2][nombre] = "beta"
[2][edad] = 36

(1) Se ha decidido usar este truco para forzar que el argumento se pase por referencia, en lugar de por valor. Excepto las listas, en AWK, cualquier argumento se pasa por valor.

lstmJson(lista, json)

Obtener una cadena de texto en formato JSON, partiendo de una lista multidimensional previamente creada con la función jsonLstm.

Argumentos

  • lista Lista Multidimensional, generada previamente con la función jsonLstm.

  • json Puntero a una cadena de texto en formato JSON. Es decir, una lista unidimensional de un sólo elemento cuyo índice es 0, y su valor es una cadena de texto JSON. Dicha cadena de texto en formato JSON, es creada por la función lstmJson conservando los valores, y la estructura, de la lista multidimensional tomada como primer argumento.

Ejemplo:

$ echo "[{\"nombre\": \"alfa\",\"edad\": 34}, {\"nombre\": \"beta\", \"edad\": 36}]" |
> gawk -i bbl_jdva.awk '{
>   json_ent[0] = $0;
>   json_sal[0] = "";
>   jsonLstm(json_ent, lista);
>   lstmJson(lista, json_sal);
>   sangra(json_sal);
> }'
[
    {
        "nombre": "alfa",
        "edad": 34
    },
    {
        "nombre": "beta",
        "edad": 36
    }
]

pinta(lista [, frmt])

Pinta por pantalla el contenido y la estructura de una lista multidimensional.

Argumentos

  • lista Lista Multidimensional, generada previamente con la función jsonLstm.

  • frmt Cadena textual de formato. Por ejemplo: "%s\t".

Ejemplo:

$ echo "[{\"nombre\": \"alfa\",\"edad\": 34}, {\"nombre\": \"beta\", \"edad\": 36}]" |
> gawk -i bbl_jdva.awk '{
>   cad_json[0]=$0;
>   jsonLstm(cad_json, lista);
>   pinta(lista, "%s\t");
> }'
alfa    34      beta    36

trae(lista, elmnt)

Devuelve el valor de un elemento localizado dentro de una lista multidimensional, generada previamente con la función jsonLstm, en función de un filtro que lo identifica.

Argumentos

  • lista Lista Multidimensional, generada previamente con la función jsonLstm.

  • elmnt Filtro que identifica un elemento dentro de una lista multidimensional con estructura JSON. Por ejemplo: "1.nombre".

Resultado

Si el elemento existe en la lista trae devuelve su valor y, ademas, pone RFUNC["trae"] a 1. Si no existe, devuelve una cadena vacía "" y, además, pone RFUNC["trae"] a 0.

Ejemplo:

$ echo "[{\"nombre\": \"alfa\",\"edad\": 34}, {\"nombre\": \"beta\", \"edad\": 36}]" |
> gawk -i bbl_jdva.awk '{
>   cad_json[0]=$0;
>   jsonLstm(cad_json, lista);
>   print trae(lista, "[2].edad");
> }'
36

quita(lista, elmnt)

Elimina elementos de una lista multidimensional que ha sido generada previamente con la función jsonLstm.

Argumentos

  • lista Lista Multidimensional, generada previamente con la función jsonLstm.

  • elmnt Filtro que identifica al elemento dentro de la lista. Por ejemplo: "2.edad".

Resultado

Si el elemento existe en la lista, lo elimina y devuelve su posición. Ademas, pone RFUNC["quita"] a 1. Si no existe el elemento, devuelve 0. Además, pone RFUNC["quita"] a 0.

Ejemplo:

$ echo "[{\"nombre\": \"alfa\",\"edad\": 34}, {\"nombre\": \"beta\", \"edad\": 36}]" |
> gawk -i bbl_jdva.awk '{
>   cad_json[0]=$0;
>   jsonLstm(cad_json, lista);
>   quita(lista, "[1].edad");
>   lstmJson(lista, cad_json);
>   sangra(cad_json);
> }'
[
    {"nombre": "alfa"},
    {
        "nombre": "beta",
        "edad": 36
    }
]

function pon(lista, elmnt, valor)

Añade un nuevo elemento a una lista multidimencional, o modifica el valor de uno ya existente.

Argumentos

  • lista Lista Multidimensional, generada previamente con la función jsonLstm.

  • elmnt Filtro que identifica al nuevo elemento de la lista. Por ejemplo: "2.edad".

  • valor Valor del nuevo elemento, o nuevo valor (si el elemento identificado por el filtro ya existe)

Resultado

Devuelve la posición del nuevo elemento, o la posición del que se haya modificado, en caso de que existiese.

Ejemplo:

$ gawk -i bbl_jdva.awk 'BEGIN{
> json[0]="";
> delete lista;
> pon(lista, "nombre", "Juan");
> pon(lista, "dirección.tipo", "Calle");
> pon(lista, "dirección.nombre", "de la Diligencia");
> pon(lista, "dirección.número", 23);
> lstmJson(lista, json);
> sangra(json);
> }'
{
    "nombre": "Juan",
    "dirección": {
        "tipo": "Calle",
        "nombre": "de la Diligencia",
        "número": 23
    }
}

function sangra(json)

Pinta por pantalla el texto en formato JSON que se le pasa como argumento, sangrando las líneas para facilitar su lectura.

Argumentos

  • json Puntero a cadena de texto en formato JSON.

Ejemplo:

$ echo "[{\"nombre\": \"alfa\",\"edad\": 34}, {\"nombre\": \"beta\", \"edad\": 36}]" |
> gawk -i bbl_jdva.awk '{
> print $0 "\n";
> json[0]=$0;
> sangra(json);
> }'
[{"nombre": "alfa","edad": 34}, {"nombre": "beta", "edad": 36}]

[
    {
        "nombre": "alfa",
        "edad": 34
    },
    {
        "nombre": "beta",
        "edad": 36
    }
]