Perlkurs Dateiverarbeitung. Dr. Marc Zapatka Deutsches Krebsforschungszentrum Molekulare Genetik Gruppenleiter Bioinformatik

Ähnliche Dokumente
Öffnen einer Datei. Programm mit einer Fehlermeldung beendet. open( IN, "datei.txt" ) or die( "open-fail: $!" );

Perlkurs WS 2014/15: 08 Referenzen

Perl-Praxis. Dateien und Daten. Jörn Clausen

Übersicht PERL. !!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!!

Einführung in Perl. O'REILLY Beijing Cambridge Farnham Köln Sebastopol Taipei Tokyo. Randal L. Schwartz, Tom Phoenix & brian dfoy

Perl-Praxis. Dateien und Daten. Madis Rumming Jan Krüger

Perl-Praxis. Dateien und Daten.

Allgemeines. Shell Programmierung Unix. Kommentar. Vorgangsweise. Mag. Thomas Griesmayer

Kommunikation von Prozessen: Signale und Pipes

Programmier-Befehle - Woche 10

Perl-Praxis. Dateien und Daten. Jörn Clausen Daniel Hagemeier, Jan Krüger

Perl-Praxis. Dateien und Daten. Jörn Clausen Jens Reeder, Jan Krüger

Perl-Praxis. Dateien und Daten.

9 Block 9: Von der Idee zum Programm: Restrict.pl

Verwenden Sie für jede Aufgabe die C++ IDE von Eclipse (pro Aufgabe ein Projekt).

Objekterkennung auf Bildern mit OpenCV und Image::ObjectDetect

Übersicht Shell-Scripten

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Linux Prinzipien und Programmierung

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Kommandozeileneingabe. Einführung in Perl Kommandozeileneingabe etc. Kommandozeileneingabe Optionen. Kommandozeileneingabe Bsp (1)

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Programmieren in C++

Ein- und Ausgabe mit Dateien

Teil V. IO und weitere Datentypen

Perl-Praxis. Dateien und Daten. Jörn Clausen, Jan Krüger Jens Reeder, Alex Sczyrba. AG Praktische Informatik Technische Fakultät Universität Bielefeld

10. Datenbanken und DBI Ties BerkeleyDB Datenbanken und DBI Oracle, Mysql und Proxy Server Ties tie

Musterlösung

Programmier-Befehle - Woche 08

Nachdem die VM gestartet ist und sich darin angemeldet wurde, starten wir Eclipse.

Hallo Jessi, wenn ich das. DATA aufg3_b; vari='<.0001'; IF &wil_two_test. le vari THEN pwert=0.0001;

Ein- und Ausgabe mit Dateien

Perl-Praxis. Dateien und Daten. Jörn Clausen, Jan Krüger Jens Reeder, Alex Sczyrba. AG Praktische Informatik Technische Fakultät Universität Bielefeld

Programmieren in Java

Stream EDitor SED und Reguläre Ausdrücke

Nachtrag: Funktionen ord und chr. Einführung in Perl für Linguisten Dateihandle, etc. Nachtrag: for und foreach (1) Nachtrag: for und foreach (2)

Informatik - Übungsstunde

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2018

Musterlösung Klausur 11/ Fragen zu utf-8: 1.1. Welche zwei Methoden gibt es, um STDIN und STDOUT auf utf-8 zu setzen.

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010

8. Arbeiten mit Dateien

Object Oriented Perl. Wie man auch bei "einfachen" Skripts mit modernen Software Entwicklungs-Methoden Qualität und Produktivität verbessern kann

10 Block 10: Verwendung von Modulen in Perl

Übersicht. Einführung in Perl Mustersuche III/ Datentypen II. Mehrzeiliges Matching (1) Mehrzeiliges Matching (2) chomp

Arbeiten mit der Shell Teil 2

Arbeiten mit der Shell Teil 2

Arbeiten mit der Shell Teil 2

Pascal Schärli

Dateneingabe und Transformation Übersicht

Strings (Zeichenketten)

Mapra: C++ Teil 7. Felix Gruber. 3. Juni IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 7 3.

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1

Ulrich Stein

E-/A-Funktionalität nicht Teil der Programmiersprache

select Einführung in Perl Dateien, Verzeichnisse und Prozesse II Autoflush - Bsp (1) Autoflush

Programmentwicklung ohne BlueJ

Programmieren in C++

Perlkurs WS 14/15 - Einführung

Informatik für Mathematiker und Physiker Woche 7. David Sommer

Ein-/Ausgabe, Dateisystem. Kapitel 9: Ein-/Ausgabe. Programmieren in C für Elektrotechniker. Programmieren in C. Dateisystem. Programmieren in C

Arithmetik in der tcsh

Algorithmen und Datenstrukturen Musterlösung 5

Unix Grundlagen. - ii - Ambit Professional Seminar Series. Autor: Prof. J. Anton Illik Diplom-Informatiker

p^db=`oj===pìééçêíáåñçêã~íáçå=

Unix-Shells. mehrere Befehle in einer Zeile. bash: Grundlagen. Ein- und Ausgaben umlenken. Befehle: Dateien und Verzeichnisse (1)

MASCHINELLE SPRACHVERARBEITUNG Gertrud Faaß Basierend auf Folien von Dr. H Zinsmeister. Einführung in PERL

Input, Output, Dateien


Weather forecast in Accra

Bash-Skripting Linux-Kurs der Unix-AG

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

File I/O. Persistieren von Daten. Gastvorlesung Ralph Erdt erdt (bei) informatik.fh-wiesbaden.de

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

Strings. Daten aus Dateien einlesen und in Dateien speichern.

Perl-Workshop, Teil II

Übungsstunde: Informatik 1 D-MAVT

SAMPLE EXAMINATION BOOKLET

Termine. Techniken der CL in Perl. Kurs-Kontakt. Perl für Linguisten. Referate. Scheine..

MATLAB driver for Spectrum boards

Shell. Oder Konsole suchen im Application Finder. Auch Terminal, Bash oder Kommandozeile genannt. Bash nimmt Befehle entgegen und führt diese aus

07 Funktionen (Teil I)

Dateizugriff unter C

Mercury PIE Plugin Interface Dokumentation. Version: 1.1 Datum: Verfasser: G.Trietsch. docuform GmbH, Karlsruhe, Germany

Einführung in Perl O'REILLY" 2. Auflage. Randal L. Schwartz & Tom Christiansen. Deutsche Übersetzung von Matthias Kalle Dalheimer

Grundlagen der Informatik 6. Arrays I

java.io Ziel Ressourcen Page 1 Verstehen der unterschiedlichen I / O Möglichkeiten Anwenden der Java I/ O Klassen Java Tutorial Java API Dokumentation

Arbeiten mit der Shell Teil 2

Einführung in die Computerlinguistik Einführung in Perl (1)

perl parentheses HOWTO.txt

KLAUSUR ZUM BACHELORMODUL,,EINFÜHRUNG IN DIE PROGRAMMIERUNG WS 2011/12, DR. MAXIMILIAN HADERSBECK KLAUSUR AM

The process runs automatically and the user is guided through it. Data acquisition and the evaluation are done automatically.

Eine Beschreibung des Programms und der dahinter stehenden Philosophie.

Can I use an older device with a new GSD file? It is always the best to use the latest GSD file since this is downward compatible to older versions.

DAP2 Praktikum Blatt 3

Transkript:

Perlkurs Dateiverarbeitung Dr. Deutsches Krebsforschungszentrum Gruppenleiter Bioinformatik

Umgang mit Dateien in Perl Dateitest- oder Prüfoperatoren um was für eine Art Datei handelt es sich? Durch Verzeichnisse gehen (alle) Dateien darin bearbeiten Dateien in Perl öffnen zum Lesen, Schreiben, Anhängen Eine Datei Zeile für Zeile durchgehen Ausgabe auf STDERR Formatierte Ausgabe Parameter übergeben Lesen von STDIN Dateien umbenennen und löschen Fehlerbehandlung

Dateitest-Operatoren -e File or directory name exists -f Entry is a plain file -d Entry is a directory -z File exists and has zero size (always false for directories) -s File or directory exists and has nonzero size (the value is the size in bytes) -r File or directory is readable by this (effective) user or group -w File or directory is writable by this (effective) user or group -x File or directory is executable by this (effective) user or group Quelle: http://www.devshed.com/c/a/perl/file-tests-in-perl/

Verzeichnisse durchgehen I my $dirtoget="/home/yourname/www/images/"; opendir (DIR, $dirtoget) die ("Cannot open directory $dirtoget\n"); my @thefiles = readdir (DIR); # store names of files in an array closedir (DIR); foreach my $file (@thefiles) unless ( ($file eq ".") ($file eq "..") ) # special Unix "files" print "$file is a real file\n";

Verzeichnisse durchgehen II if (-d $dirtoget) opendir (DIR, $dirtoget) die ("Cannot open directory $dirtoget\n"); foreach my $file (readdir DIR) # implicit array if (-f $dirtoget."/".$file) # need complete path to file print "$file is a real file\n"; else print "$dirtoget is not a directory (or does not exist)\n"; closedir DIR;

Im Programm eine Datei öffnen Zuweisung eines file handle und des Öffnungsmodus open (IN, "<".$datei); # zum Lesen open (IN, $datei); # zum Lesen, Kurzform open (OUT, ">$datei"); # zum (über)schreiben open (LOG, ">>".$datei); # zum Anhängen ACHTUNG: Wenn die Datei nicht im aktuellen Verzeichnis liegt (bzw. angelegt werden soll), muss die Variable mit dem Dateinamen den kompletten Pfad enthalten, z.b. $datei="/home/student/documents/myfile.txt";

Eine Datei einlesen #Prüfen, ob Datei zum Lesen geöffnet werden kann open (FH, $input) or die "Could not open $input: $\n"; ($ = Fehlermeldung, meist no such file or directory oder permission denied ) #Erste Zeile einlesen $line = <FH>; #Zeile für Zeile durchgehen und bearbeiten while (<FH>) # Kurzform von: while ($_ = <FH>) chomp; # mache etwas mit der Zeile, hier: my @spalten = split ("\t", $_); # den Zeilenumbruch entfernen, print $spalten[0]; ausgeben #Schließen close (FH); # in ein array umwandeln und den # ersten Eintrag des Arrays

In eine Datei schreiben #Prüfen, ob Datei angelegt werden kann open (OUT, '>'.$outfile) or die "Could not open $outfile for writing: $\n"; #Etwas zum Ausgeben konstruieren my @array = ("Zeile 1", "Zeile 2", "Zeile 3"); #Schreiben foreach my $line (@array) print OUT "$line\n"; #Schließen close OUT;

Ausgabemöglichkeiten print Kurzform von print STDOUT Kann in eine Datei umgeleitet werden: perl myprog.pl > ausgabe.txt print STDERR Bei Umleiten von STDOUT immer noch da Umleiten in eine Datei mit 2> Dies leitet auch Fehlermeldungen und Warnungen um print FH In eine Datei, die mit den file handle FH angesprochen wird

Formatierte Ausgabe I: printf $Pi = 3.1415126; printf ("%d", $Pi); # no decimal places #=> 3 printf ("%.3f", $Pi); # round number to 3 digits after decimal point #=> 3.142 $Cost = 499; printf "The cost is \$%6.2f\n", $Cost; #=> The cost is $499.00 \$, um $ als Zeichen auszugeben: escape \n für Zeilenumbruch

Formatierte Ausgabe II: sprintf #Gibt einen formatierten String zurück $rounded = sprintf("%.3f", $number); print $rounded; #ACHTUNG bei Runden auf Ganzzahl $rounded = sprintf ("%.0f\n", 0.5) => 0 $rounded = sprintf ("%.0f\n", 0.51) => 1 $rounded = sprintf ("%.0f\n", 3.5) => 4 # Korrekt Runden: foreach my $number (0.5, 0.51, 3.5) $rounded = int ($number+0.5); print "$rounded "; => 1 1 4

Kommandozeilenparameter Spezial-Array @ARGV Programmaufruf: script.pl arg1 arg2 In script.pl: if (@ARGV < 2) die "Das Programm $0 braucht Kommandozeilenparameter. Nämlich folgende: 1.... 2. \n"; my $arg1 = shift; # $ARGV[0] my $arg2 = shift; # $ARGV[1]

Beispiel #/usr/bin/perl use strict; use warnings; if (@ARGV < 2) # command line arguments given to the program die "USAGE of $0: 1.file to read 2. file to write\n"; my $input = shift; # get the path of the file to read from (given by first command line argument) open (FH, $input) or die "Could not open $input: $\n"; # open file for reading, give it a file handle my $outfile = shift; # get the path of the file to write to (given by second command line argument) open (OUT, '>'.$outfile) or die "Could not open $outfile for writing: $\n"; my $line = ""; # to store the lines my $counter = 0; # to count the lines while (<FH>) # read file line by line until the end. This is the short form of: while ($_ = <FH>) $counter++; $line = $_; # store the current line in a variable chomp $line; # remove the newline character print OUT "$line"; # output the line without newline character into a file print "$counter\n"; # output number on the screen, this can be redirected with > print STDERR "$_"; # print the original line (still with newline character) on STDERR, this can be redirected with 2> close (FH); # close the file close (OUT); print STDERR "There were $counter lines in $input\n"; exit;

Lesen von STDIN Programme, die Benutzereingaben erwarten Eingabewerte/ in Datei speichern, jede Eingabe in neue Zeile Diese Datei übermitteln mittels pipe cat myinput.txt I_read_from_stdin oder redirection I_read_from_stdin < myinput.txt Im Perl-Programm STDIN als Quelle definieren $input = <STDIN>; while (<STDIN>) Perl kann eine pipe wie eine Datei behandeln I_write_to_STDOUT perl meinskript.pl in meinskript.pl: my $infile = shift; open

Dateien umbenennen und löschen #Datei umbenennen my $oldfile = "test/file1.txt"; my $newname = "test/file2.txt"; rename ($oldfile, $newname); #Datei löschen my $filetodelete = "test/file1.txt"; unlink ($filetodelete); #Verbesserung: erst testen, ob die Datei existiert if (-f $filetodelete)...

Typische Fehler I open vergessen oder falsche Option readline() on unopened filehandle [FHName] at [Skriptname] line... print() on unopened filehandle [FHName] at [Skriptname] line... Vergessen von: $ No such class [Variablenname] at [Skriptname] line..., near "my [Variablenname]" ; Syntax error at [Skriptname] line..., near... my Can't modify constant item in... at [Skriptname] line..., near Bareword "[Variablenname]" not allowed while "strict subs" in use at [Skriptname] line... Missing right curly or square bracket at [Skriptname] line..., at end of line Syntax error at [Skriptname] line..., at EOF ) Syntax error at [Skriptname] line... near "

Typische Fehler II Vergessen von " Bareword found where operator expected at... (Might be a runaway multi-line "" string starting on line...) (Do you need to predeclare print?) Backslash found where operator expected... String found where operator expected... (Missing semicolon on previous line?) syntax error at... Can't find string terminator '"' anywhere before EOF at... Fence post error Zugriff auf nicht existierende Arrayelemente my @array = (1, 2); print $array[2], \n"; => Use of uninitialized value $array[2] in print at Tippfehler

Wiederholung: Hash #Leeren Hash erzeugen my %h = (); #Neues Schluessel/Wert Paar anlegen $h Fred ="Flintstone"; #Eintrage aus Hash loeschen delete $h Fred ; #Existenz eines Schlüssel/Wert Paars testen if (exists ($h Fred ))

Acknowledgements Barbara Hutter