Practica2 PC (Laboratori Integrat) (2016)

Ejercicio Catalán
Universidad Universidad Autónoma de Barcelona (UAB)
Grado Genética - 2º curso
Asignatura Tècniques Instrumentals
Año del apunte 2016
Páginas 13
Fecha de subida 02/04/2016
Descargas 9
Subido por

Vista previa del texto

Grau de Genètica curs 2015-2016 Laboratori Integrat IV Tècniques Instrumentals pràctica 2: Programació en Perl. Operacions bàsiques a Perl Professors: Raquel Egea (raquel.egea@uab.cat) Sergi Hervás (sergi.hervas@uab.cat) En aquesta pràctica ens familiaritzarem amb els elements bàsics de la programació en Perl: els tipus de variables, aprendrem a obrir i tancar arxius i introduirem informació al programa de diverses maneres.
Aquest sessió s’organitza en tres parts: 1) Els tres tipus de variables en Perl: 1.1.- Variables escalars 1.2.- Matrius 1.3.- Hashes o Matrius associatives 2) Entrada/Sortida del programa: 2.1.- Entrada des del teclat 2.2.- Lectura i escriptura d’arxius 3) Transformació d’un tipus de variable a un altre 3.1.- Transformació de variable escalar a matriu i de matriu a escalar: join i split.
1. Els tipus de variables en Perl 1.1.- Variables escalars Les variables proporcionen un lloc a la memòria on guardar dades temporalment. Una variable escalar és una cadena (caràcters alfanumèrics, espais, caràcters especials).
Aquest tipus de variables van precedides sempre pel símbol $, seguit per un nom d'un caràcter com a mínim.
Per anomenar una variable es poden fer servir lletres, números i "_", començant sempre per una lletra. Es distingeix entre minúscules i majúscules, per tant, $A i $a són diferents.
Per a l'assignació es fa servir el signe igual (=), a l’esquerra del signe igual es posa la variable a la qual li volem assignar un valor i a la dreta el valor que li volem assignar. En el cas de ser un valor alfanumèric (text) aquest s'escriu entre cometes, que poden ser simples o dobles.
Hi ha caràcters especials (salt de línia, tabulador, etc.) que, com en molts altres llenguatges, es presenten mitjançant la barra d'escapament.
$variable_escalar;    \n salt de línia \t tabulació \" les cometes dobles (només si la cadena està delimitada per cometes dobles) Activitat 1.1.1: Crea un programa perquè emmagatzemi la seqüència de DNA que hi ha a continuació en una variable.
Seqüència de DNA: ATGAAATTCTTCCTGCTGCTTTCCCTCATTGGATTCTGCTGGGCCCAATAGCTATAGT Activitat 1.1.2: Guarda les dues seqüències de DNA següents en dues variables escalars i escriu-les a la pantalla. A continuació, crea una tercera variable que contingui les dues primeres concatenades. Escriu també el resultat. Recorda que l'operador "." ens serveix per a concatenar cadenes Primera seqüència de DNA: ATGAAATTCTTCCTGCTGCTTTCCCTCATTGGATTCTGCTGGGCCCAATAGCTATAGT Segona seqüència de DNA: AAAGTCTATGTTGGCAATGATGGCAAAGCTCACTTTTCTAAATTGCTAGTAGTCAGTA Activitat 1.1.3: Calcula la longitud de les cadenes anteriors. Per calcular la longitud d'una variable es pot fer servir la funció length. Comprova que has generat correctament la cadena concatenada utilitzant els operadors aritmètics, és a dir, sumant la longitud de les dues seqüències de DNA proporcionades prèviament.
Els operadors aritmètics en perl:  + -> suma  - -> resta  * -> multiplicació  / -> divisió  ** -> exponencial  () -> agrupació #Activitat 1.1.3 1.2.- Matrius Mentre que les variables escalars només poden emmagatzemar un valor, les matrius en poden emmagatzemar molts. Comencen amb el signe @ i contenen una llista de valors escalars (números i/o textos). Per a accedir a cada un d’aquests valors s'utilitza un nombre que indica la seva posició dins de la llista. La numeració comença a 0, i es col·loca entre claudàtors ( [ ] ). Per accedir a un valor individualment s'utilitza el signe $, ja que, en definitiva, una matriu està formada per diferents variables escalars.
@ array = ('Laura', 'Maria', 'Elena', 'Sergio'); $array[2]; #serà Elena Activitat 1.2.1: Declara una matriu de quatre elements: A, C, G, T i accedeix a cadascun dels seus elements per separat, fent que l'output sigui: Primer element: A Segon element: C Tercer element: G Quart element: T Compta el número d’elements de la matriu i guarda el valor a una variable. Com has comptat el número d’elements? De les diferents opcions que hi ha, totes ens donen el mateix resultat? Activitat 1.2.2: TEORIC, NO ES FA Un cop assignats els valors dins d'una matriu aquests poden ser modificats. Associa cadascuna d'aquestes funcions a l'acció que realitzen.
push pop unshift shift $# reverse 1.- Notació especial per conèixer l'últim índex de la matriu.
2.- Afegeix un element a l’inici de la matriu.
3.- Afegeix un element al final de la matriu 4.- Treu el primer element de la matriu. S'assigna a una variable escalar si s’indica.
5.- Treure l'últim element de la matriu. S'assigna a una variable escalar si s’indica.
6.- Inverteix l'ordre dels elements de la matriu.
1.3.- Hashes o Matrius associatives Les matrius associatives són matrius on els elements tenen un 'nom' o clau (key) amb un valor (value) associat. Comencen pel signe % i els valors no van associats a una posició dins la matriu associativa, sinó que van associats a la seva clau corresponent. Per accedir a un valor individualment s'utilitza el signe $ i després del nom del hash es posa la key entre claus ( { } ).
Exemple assignació de valors a un hash: %noms = ('Joan' => '658494922’ , 'Jordi' =>'654121255'); Forma alternativa: %noms = (); $noms{'Joan'} = '658494922'; $noms{'Jordi'}='654121255'; Activitat 1.3.1: Declara un hash de purines i un altre de pirimidines.
Donada una base determinada, imprimeix el seu valor associat.
2. Entrada/sortida del programa 2.1.- Entrada des del teclat Les dades d’entrada d’un programa es poden introduir a la vegada que s’executa el programa i queden recollides de forma automàtica a la matriu @ARGV. Cada paraula que passem serà un element de la matriu, ja que s’utilitza com a separador l’espai per separar els elements en la matriu.
Durant l’execució del programa podem utilitzar la informació si utilitzem la matriu @ARGV.
>perl apartat2.1.pl parametre1 $ARGV[0] contindrà parametre1 Activitat 2.1.1: Crea un programa que mostri els 2 primers paràmetres que es passin a l’hora d’executar el programa.
Fes diverses proves a l’hora d’executar-lo.
Les dades d’entrada d’un programa també es poden introduir mentre s’està executant el programa. <STDIN> para el programa i espera a que l’usuari introdueixi informació. Si el que l’usuari introdueix s’assigna a una variable escalar, es podrà utilitzar aquesta informació. És recomanable sempre indicar prèviament a l’usuari què és el que ha d’introduir i, una vegada s’ha guardat la informació, s’ha d’eliminar el salt de línia (amb la funció chomp) ja que sempre serà l’últim caràcter que l’usuari introdueix.
$entrada = <STDIN>; chomp($entrada); print "L’usuari ha introduit: $entrada\n"; Activitat 2.1.2: Crea un programa que demani el nom d’un gen. Una vegada l’usuari hagi introduït el nom del gen, el programa l’ha de mostrar.
2.2.- Lectura i escriptura d’arxius Per llegir o escriure dades a un arxiu és necessari l'ús de “filehandles” que són referències a aquests arxius. Per obrir un fitxer s'utilitza la funció open, seguit del nom del "filehandle" i finalment l'arxiu. A més farem servir la instrucció die que comprova si el fitxer està disponible. En cas contrari el programa es para i retorna un missatge d'error.
Lectura: open (FILEHANDLE, "nom_arxiu") or die "Missatge d'error"; Escriptura (crea el fitxer de nou): open (FILEHANDLE, ">nom_arxiu") or die "Missatge d'error"; Escriptura (afegeix a un fitxer existent): open (FILEHANDLE, ">>nom_arxiu") or die "Missatge d'error"; Tingues en compte que un arxiu només es pot obrir o bé per llegir el seu contingut o bé per escriure en ell. Si vols llegir un arxiu i afegir informació, primer s’ha de llegir en mode lectura, a continuació s’ha de tancar i s’ha de tornar a obrir en mode escriptura (amb >>!).
Una vegada s’ha obert un arxiu, per llegir el seu contingut cal utilitzar els operadors < > amb el filehandle. Aquest pas ens retornarà tantes dades com línies tingui l’arxiu. Si ho assignem a una matriu, es guardarà tot el contingut de l’arxiu i cada línia serà un element de la matriu. En canvi, si ho assignem a una variable escalar, només guardarem la primera línia! En canvi, si volem escriure en un arxiu només caldrà indicar el filehandle entre la funció print i el text que vulguem imprimir.
Lectura: @arxiucomplet = <FILEHANDLE>; Escriptura: print FILEHANDLE "Missatge per l’arxiu"; Activitat 2.2.1: Descarrega’t l’arxiu amb la seqüència del gen Hs6st de Drosophila melanogaster.
Obre el fitxer i guarda'l en una variable. Imprimeix el contingut de la variable per pantalla.
Què conté la variable escalar? Activitat 2.2.2: Obre l'arxiu anterior i guarda el seu contingut en un matriu. (No ho facis a continuació de l’activitat anterior).
Què conté cada posició de la matriu? FALTA ACTIVITAT 2.2.2 3. Transformació d'un tipus de variab le a un altre Per transformar una variable escalar o cadena en una matriu es pot fer servir la funció split. La funció inversa és join que permet transformar matrius a variables escalars o cadenes.
Exemple: $linea="192a,UAB,GGGTCTC,CCTGGAT"; @campos = split (',', $linea); $linea_tab = join ("\t", @campos); Activitat 3.1: Obre el fitxer original de la seqüència del gen Hs6st i guarda el contingut en una matriu.
Elimina la primera posició de la matriu, però guarda’t el seu contingut.
Transforma la resta de la matriu a una variable escalar sense cap tipus de connectors entre posicions. (Pots eliminar tots els salt de línia alhora executant la funció chomp sobre la matriu).
Crea un hash on la clau (key) sigui el nom del gen i el valor (value) sigui la seqüència.
Imprimeix el valor en un nou arxiu.
Activitat 3.2: Obre el fitxer obtingut a l’activitat 3.1 i guarda el contingut en una matriu.
Comprova si s’ha omplert més d’un element.
Transforma el primer element en una nova matriu fent que cada nucleòtid sigui un element de la matriu.
Imprimeix els tres primers nucleòtids de la seqüència.
Genera una variable escalar on cada nucleòtid estigui separat per un espai.
#Obre el fitxer i guarda Com es pot veure, el fet de posar "or die" ens indica que, en el cas que no es trobi l'arxiu, surti el missatge "error". Així mateix, la matriu @DNA guardarà el contingut de dit arxiu, gràcies a l'equivalència del seu FILEHANDLE. Per últim, tanquem el programa un cop guardat per tal de no impedir possibles modificacions, així com consumir recursos innecessaris.
Per guardar el contingut, creem una variable escalar amb l'element 0, el qual correspon a la primera posició  en el cas de documents FASTA recordem que seran noms o indicadors del que hi ha, (s'indica amb > al principi de la línia de comanda que és d'aquest tipus).A continuació, amb la funció shift realitzem la segona part de l'apartat.
#Tranforma En definitiva, amb la funció join transformen una matriu en una variable escalar #Crea un hash Per posar la seqüència com a valor, definitivament usarem la variable escalar abans emprada. Així mateix, cal recordar que amb > dins de la funció open es permet crear arxius, mentre que >> indica que, a més, es poden modificar.
#Comprovar si s’ha obert… Una de les maneres de comprovar-ho és mitjançant una variable escalar a la qual se li ha assignat la matriu. Això es degut a que es dita escalar mostrà el número de posicions (1 dada).
#Transforma… Per fer-ho, s'usa l'acció contrària a join, split.
...