• No se han encontrado resultados

Del archivo sourceAWK.txt

N/A
N/A
Protected

Academic year: 2022

Share "Del archivo sourceAWK.txt"

Copied!
14
0
0

Texto completo

(1)

Del archivo sourceAWK.txt

• Se abre la máquina virtual de MSDOS

• Se edita el archivo sorceAWK.txt

• Se copia y pega las primeras tres líneas de código (una del comentario y dos de código) dentro de un archivo de texto

• Se seleccionan las tres calculadoras del código

sourceAWK.txt y se copian dentro de otro archivo.

• Se ejecuta el archivo de 3 líneas con el de las calculadoras.

• Se observa lo que realiza AWK

(2)

Código en AWK ¿Qué hace?

# unbundle - unpack a bundle into separate files

$1 != prev { close(prev); prev = $1 }

{ print substr($0, index($0, " ") + 1) >$1

}

(3)

Código en AWK ¿Qué hace?

# desenreda(separa) – desempaca un paquete de código dentro de

archivos separados

$1 != prev { close(prev); prev = $1 }

{ print substr($0, index($0, " ") + 1) >$1 }

(4)

($1 significa para awk el primer campo de un registro

$2 es el segundo campo del registro

$3 es el tercer campo del registro y así sucesivamente…)

!= (significa diferentes expresiones) prev #campo anterior que compara

dentro del archivo con el campo

actual y define si es diferente

(5)

Código en AWK ¿Qué hace?

$0 #significa todo el registro para awk

{ close(prev); #signfica que crea un archivo al cerrarlo

{ close(prev); prev = $1 }

{ print substr($0, index($0, " ") + 1)

>$1 }

(6)

Código en AWK ¿Qué hace?

prev = $1 #Significa que elimina el primer registro por espacio o nada.

{ print substr #imprime ($0, #el registro completo

index($0, " ") + 1) >$1 } #Elimina la primera

columna

(7)

PASO 1.

1. Crear en un el editor de MS-DOS, el archivo s.awk con el contenido de las 3 líneas de código ya explicadas que se encuentran en el archivo sourceAWK.txt descargado y des-compactado del site: UPIICSA Sara Mendez

C:\_ edit s.awk <enter>

NOTA: Si se crea el archivo en el block de notas,

automaticamente éste le agrega al archivo

creado la extensión .txt y así no trabaja el

interpréte de AWK

(8)

Contenido del archivo s.awk

# unbundle - unpack a bundle into separate files

$1 != prev { close(prev); prev = $1 }

{ print substr($0, index($0, " ") + 1) >$1 }

(9)

PASO 2.

Se crea otro archivo con el contenido de las tres calculadoras CALC1 CALC2 CALC3 tomadas del sourceAWK.txt con un copy/paste

Con el nombre de cs.txt

NOTA: recuerde que es mejor hacerlo con el editor de MS-DOS

Edit cs.txt (y su contenido es…)

(10)

Contenido del cs.awk

calc1 # calc1 - reverse-Polish calculator, version 1 calc1 # input: arithmetic expressions in reverse Polish calc1 # output: values of expressions

calc1

calc1 { for (i = 1; i <= NF; i++)

calc1 if ($i ~ /^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)$/) { calc1 stack[++top] = $i

calc1 } else if ($i == "+" && top > 1) { calc1 stack[top-1] += stack[top]; top-- calc1 } else if ($i == "-" && top > 1) { calc1 stack[top-1] -= stack[top]; top-- calc1 } else if ($i == "*" && top > 1) { calc1 stack[top-1] *= stack[top]; top-- calc1 } else if ($i == "/" && top > 1) { calc1 stack[top-1] /= stack[top]; top-- calc1 } else if ($i == "^" && top > 1) { calc1 stack[top-1] ^= stack[top]; top-- calc1 } else {

calc1 printf("error: cannot evaluate %s\n", $i) calc1 top = 0

calc1 next calc1 }

calc1 if (top == 1)

calc1 printf("\t%.8g\n", stack[top--]) calc1 else if (top > 1) {

calc1 printf("error: too many operands\n") calc1 top = 0

calc1 } calc1 }

(11)

Continua contenido de cs.awk

calc2 # calc2 - reverse-Polish calculator, version 2 calc2 # input: expressions in reverse Polish calc2 # output: value of each expression calc2

calc2 { for (i = 1; i <= NF; i++)

calc2 if ($i ~ /^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)$/) { calc2 stack[++top] = $i

calc2 } else if ($i == "+" && top > 1) { calc2 stack[top-1] += stack[top]; top-- calc2 } else if ($i == "-" && top > 1) { calc2 stack[top-1] -= stack[top]; top-- calc2 } else if ($i == "*" && top > 1) { calc2 stack[top-1] *= stack[top]; top-- calc2 } else if ($i == "/" && top > 1) { calc2 stack[top-1] /= stack[top]; top-- calc2 } else if ($i == "^" && top > 1) { calc2 stack[top-1] ^= stack[top]; top-- calc2 } else if ($i == "sin" && top > 0) { calc2 stack[top] = sin(stack[top]) calc2 } else if ($i == "cos" && top > 0) { calc2 stack[top] = cos(stack[top]) calc2 } else if ($i == "atan2" && top > 1) {

calc2 stack[top-1] = atan2(stack[top-1],stack[top]); top-- calc2 } else if ($i == "log" && top > 0) {

calc2 stack[top] = log(stack[top]) calc2 } else if ($i == "exp" && top > 0) { calc2 stack[top] = exp(stack[top])

(12)

Final del archivo cs.awk

calc3 # calc3 - infix calculator calc3

calc3 NF > 0 { calc3 f = 1 calc3 e = expr()

calc3 if (f <= NF) printf("error at %s\n", $f) calc3 else printf("\t%.8g\n", e)

calc3 } calc3

calc3 function expr( e) { # term | term [+-] term calc3 e = term()

calc3 while ($f == "+" || $f == "-")

calc3 e = $(f++) == "+" ? e + term() : e - term() calc3 return e

calc3 } calc3

calc3 function term( e) { # factor | factor [*/] factor calc3 e = factor()

calc3 while ($f == "*" || $f == "/")

calc3 e = $(f++) == "*" ? e * factor() : e / factor() calc3 return e

calc3 } calc3

calc3 function factor( e) { # number | (expr) calc3 if ($f ~ /^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)$/) { calc3 return $(f++)

calc3 } else if ($f == "(") { calc3 f++

calc3 e = expr() calc3 if ($(f++) != ")")

calc3 printf("error: missing ) at %s\n", $f) calc3 return e

calc3 } else {

calc3 printf("error: expected number or ( at %s\n", $f) calc3 return 0

calc3 } calc3 }

(13)

Paso 3

• Una vez completado el paso 1 y paso 2

Con el archivo ejecutable del interprete de awk Se realiza en el interprete de comandos de la máquina virtual de MS-DOS:

C:\> awk95 –f s.awk cs.txt <enter>

• Si los archivos existen el sistema no responde

nada y, al solicitar el directorio del disco

aparecerá: calc1 calc2 y calc3

(14)

conclusiones

• Los tres archivos estarán sin la columna 1 y

este es el nombre que aparece para cada

archivo.

Referencias

Documento similar

Hay una serie de lesiones (quiste dermoide, frenillo vestibular, frenillo lingual, orejas alatas, apéndices preauriculares, fístulas preauriculares, hendidura cervical media,

La razón es la misma: en una provincia petrolera, al igual que en un yacimiento de petróleo, la producción aumenta al principio cuando se explotan nuevos pozos hasta que se alcanza

Las características del trabajo con grupos que se debería llevar a cabo en los Servicios Sociales de Atención Primaria (SSAP), en términos de variabilidad o estabilidad

Txt

[r]

- Dificultad para apuntar la tarea diaria de cada asignatura.. - Es desorganizado en

En el caso de películas de coproducción minoritaria italiana, es frecuente que las películas se estrenaran antes en el mercado extranjero y después en el italiano: también

Me pregunté en qué pensaba cuando no había nadie más, cuando estaba sola y su belleza era solo para ella misma.. Decidimos mirar los archivos de La voz