ESERCIZIO

13
BIOINFO3 - Lezione 26 1 ESERCIZIO ESERCIZIO Esercizio. Leggere delle sequenze di DNA (una per riga, a partire da inizio riga) e stampare solo le sequenze lunghe più di 20 basi. Versione compatta

description

Versione compatta. ESERCIZIO. Esercizio. Leggere delle sequenze di DNA (una per riga, a partire da inizio riga) e stampare solo le sequenze lunghe più di 20 basi. Versione compatta. ESERCIZIO. - PowerPoint PPT Presentation

Transcript of ESERCIZIO

Page 1: ESERCIZIO

BIOINFO3 - Lezione 26 11

ESERCIZIOESERCIZIO

Esercizio. Leggere delle sequenze di DNA (una per riga, a partire da inizio riga) e stampare solo le sequenze lunghe più di 20 basi.

Versione compatta

Page 2: ESERCIZIO

BIOINFO3 - Lezione 26 22

ESERCIZIOESERCIZIO

Esercizio. Leggere in redirezione un file di sequenze di DNA (una per riga, a partire da inizio riga) e stampare la lunghezza minima, massima e media delle sequenze.

Versione compatta

Page 3: ESERCIZIO

BIOINFO3 - Lezione 26 33

DEBUGGERDEBUGGER

Il Perl offre la possibilità di osservare passo per passo l’esecuzione dei propri programmi per verificarne la correttezza e scoprirne eventuali errori “di progettazione”. Si tratta di richiederne l’esecuzione mediante un DEBUGGER

Il debugger si può attivare in due modi diversi:

•perl –d nomeprogramma

•aggiungendo nella prima riga del programma (quella con #!/usr/bin/perl) l’opzione -d

Una volta all’interno del debugger si possono usare i comandi

h help-per vedere l’elenco dei comandi

q quit-per uscire dal debugger

s step-per eseguire l’istruzione corrente (basta darlo la prima volta, per poi proseguire con il tasto di INVIO)

p print-per stampare il valore di una variabile

Page 4: ESERCIZIO

BIOINFO3 - Lezione 26 44

OPERAZIONI SUI FILEOPERAZIONI SUI FILE

Perl permette di leggere o scrivere direttamente su un file, anche senza utilizzare la redirezione.

Abbiamo visto che la redirezione opera al di fuori del programma cambiandone l’input e/o l’output e che ciò è completamente trasparente al programma il quale crede comunque di leggere da STDIN e scrivere su STDOUT.

programma <file-input >file-output

programma

ST

DIN

ST

DO

UT

file-input file-output

Page 5: ESERCIZIO

BIOINFO3 - Lezione 26 55

HANDLEHANDLE

STDIN e STDOUT sono delle handle, cioè delle variabili particolari (il cui nome non inizia per $) che fanno riferimento ad un file. Nelle operazioni di input di una riga < > e di print normalmente si specifica l’handle con cui effettuare l’operazione.

<HANDLE1> input dal file associato all’handle HANDLE1

print HANDLE2 “…”; output sul file associato all’handle HANDLE2

N.B. HANDLE1 e HANDLE2 indicano 2 nomi generici di handle ad as. I, O, A, PIPPO, FILE_INPUT, FILE_OUTPUT

Se non è specificata alcuna handle (come abbiamo sempre fatto sinora!) l’input avviene da STDIN e l’output su STDOUT

< > è equivalente a <STDIN>

print “…”; è equivalente a print STDOUT “…..”;

Page 6: ESERCIZIO

BIOINFO3 - Lezione 26 66

HANDLEHANDLE

Il seguente schema esemplifica in generale gli input e output di un programma

programma

ST

DIN

ST

DO

UT

file-input file-output

HANDLE1

HANDLE2

file2

file1

? ?

Page 7: ESERCIZIO

BIOINFO3 - Lezione 26 77

APERTURA DEL FILEAPERTURA DEL FILE

Per poter scrivere o leggere un file è innanzitutto necessario aprirlo ed associarlo ad una handle. Dopodichè in ogni operazione di input o print relativa a quel file si dovrà fare riferimento a quella handle.

open (I,”pippo”);

open (I,”<pippo”);

Apre il file di nome ‘pippo’ in lettura, associandolo alla handle di nome I. Se il file non esiste l’istruzione restituisce il valore falso (0)

open (O,”>pluto”);

Apre il file di nome ‘pluto’ in scrittura, associandolo alla handle di nome O. Se il file non esiste viene creato, se esiste già esso viene sovrascritto

open (A,”>>topolino”);

Apre il file di nome ‘topolino’ in scrittura, associandolo alla handle di nome A. Se il file non esiste viene creato, se esiste già lo si scriverà in coda alla parte già esistente

Page 8: ESERCIZIO

BIOINFO3 - Lezione 26 88

APERTURA DEL FILEAPERTURA DEL FILE

Supponiamo di avere eseguito le tre istruzioni open:

open (I,”<pippo”);

open (O,”>pluto”);

open (A,”>>topolino”);

A questo punto è possibile:

Leggere dal file “pippo” usando la handle I

<I>Scrivere sul file “pluto” (svuotato, se già esistente)

print O “………”;Scrivere sul file “topolino” (in coda al file)

print A “………”;

programma

I O A

pippo

pluto

topolino

Page 9: ESERCIZIO

BIOINFO3 - Lezione 26 99

OUTPUTOUTPUT

Esempi di istruzioni print su differenti handle.

Notare l’effetto dei due differenti tipi di open in scrittura sui file nomi1 e nomi2

PRIMA

DOPO

Page 10: ESERCIZIO

BIOINFO3 - Lezione 26 1010

INPUTINPUT

Esempio.

Programma che riceve come argomento (nella linea di comando) il nome del file da aprire. Se il file esiste ne legge le righe e le stampa.

Notare l’or (||). Solo se falsa la open (ovvero file non apribile: non esiste o non si ha il diritto di leggerlo) si esegue il comando die

Vedremo ora alcuni esempi di esecuzione

Page 11: ESERCIZIO

BIOINFO3 - Lezione 26 1111

INPUTINPUT

Esempi di esecuzione.

Nel primo caso l’array @ARGV è vuoto (nessun argomento).

Quindi @ARGV in un contesto scalare (@ARGV!=1) vale 0 e @ARGV!=1 è falsa. Viene eseguita subito l’istruzione die che fa terminare il programma

E’ chiaro il concetto di contesto scalare o contesto array?

Ad esempio:

@a+1

@a==1

@b=@a

@a>0

($a,@b)=@a

($a,$b)=@a

Page 12: ESERCIZIO

BIOINFO3 - Lezione 26 1212

INPUTINPUTEsempi di esecuzione.

Nel secondo caso si passa un solo argomento: “nomi”.

Quindi @ARGV=(“nomi”) e @ARGV in un contesto scalare ora vale 1. Il die non è eseguito perché la condizione dell’if ora è falsa

$file=$ARGV[0]=“nomi”

Si apre il file “nomi” ($file=“nomi”) in lettura associandolo alla handle F

Si iniziano a leggere le righe del file “nomi”.

Nel primo ciclo $r=“Marta\n”;

Nel secondo $r=“Anna\n”;

…….

Fatti 6 cicli $r=<F> diventa falso perché arrivati a fine file

Page 13: ESERCIZIO

BIOINFO3 - Lezione 26 1313

RIEPILOGORIEPILOGO

•Debugger

•Input e output su file