perl:utilisation_des_fichiers
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédente | |||
| perl:utilisation_des_fichiers [2009/03/15 13:54] – modification externe 127.0.0.1 | perl:utilisation_des_fichiers [2013/03/12 23:36] (Version actuelle) – root | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== Les fichiers ====== | ||
| + | |||
| ====== 1. Descripteurs ====== | ====== 1. Descripteurs ====== | ||
| Ligne 6: | Ligne 8: | ||
| Perl peut également manipuler ces descripteurs avec deux types de syntaxe. La syntaxe " | Perl peut également manipuler ces descripteurs avec deux types de syntaxe. La syntaxe " | ||
| + | <code perl> | ||
| open(TEXT, "> | open(TEXT, "> | ||
| print TEXT " | print TEXT " | ||
| close(TEXT); | close(TEXT); | ||
| + | </ | ||
| La deuxième syntaxe, plus " | La deuxième syntaxe, plus " | ||
| + | <code perl> | ||
| open(my $text, "> | open(my $text, "> | ||
| print $text " | print $text " | ||
| close($text); | close($text); | ||
| + | </ | ||
| Notons qu'il existe une version moderne (orienté objet) qui requiert l' | Notons qu'il existe une version moderne (orienté objet) qui requiert l' | ||
| + | <code perl> | ||
| use FileHandle; | use FileHandle; | ||
| | | ||
| Ligne 21: | Ligne 28: | ||
| print $text " | print $text " | ||
| $text-> | $text-> | ||
| + | </ | ||
| ===== Descripteurs implicites ===== | ===== Descripteurs implicites ===== | ||
| Ligne 51: | Ligne 59: | ||
| Il est important de noter qu' | Il est important de noter qu' | ||
| + | <code perl> | ||
| sub log_error { | sub log_error { | ||
| open(my $log, ">> | open(my $log, ">> | ||
| print $log @_; | print $log @_; | ||
| } | } | ||
| + | </ | ||
| ===== Avec des programmes ===== | ===== Avec des programmes ===== | ||
| On peut facilement reproduire le mécanisme du " | On peut facilement reproduire le mécanisme du " | ||
| + | <code perl> | ||
| open(MAIL, " | open(MAIL, " | ||
| print MAIL "From: eleve@insia.org\r\nSubject: | print MAIL "From: eleve@insia.org\r\nSubject: | ||
| Ligne 68: | Ligne 79: | ||
| } | } | ||
| close FILES; | close FILES; | ||
| + | </ | ||
| Ceci implique bien entendu que Perl se charge d' | Ceci implique bien entendu que Perl se charge d' | ||
| Ligne 83: | Ligne 95: | ||
| Dans ce cas on peut utiliser les appels systèmes POSIX standard : | Dans ce cas on peut utiliser les appels systèmes POSIX standard : | ||
| + | <code perl> | ||
| use Fcntl; # Imports O_xxx constants | use Fcntl; # Imports O_xxx constants | ||
| | | ||
| Ligne 93: | Ligne 106: | ||
| } | } | ||
| close FILE; | close FILE; | ||
| + | </ | ||
| ===== Mode binaire ===== | ===== Mode binaire ===== | ||
| Ligne 105: | Ligne 119: | ||
| On peut lire une quantité de donnée quelconque depuis un fichier simplement à l'aide de //read// : | On peut lire une quantité de donnée quelconque depuis un fichier simplement à l'aide de //read// : | ||
| + | <code perl> | ||
| read(FILE, $buffer, 1500); | read(FILE, $buffer, 1500); | ||
| read(FILE, $buffer, 1500, 2000); # Lit à partir du 2000ème octet | read(FILE, $buffer, 1500, 2000); # Lit à partir du 2000ème octet | ||
| seek(FILE, 5000); # Positionne le curseur de lecture au 5000ème octet | seek(FILE, 5000); # Positionne le curseur de lecture au 5000ème octet | ||
| + | </ | ||
| ===== Par enregistrement ===== | ===== Par enregistrement ===== | ||
| Il s'agit de l' | Il s'agit de l' | ||
| + | <code perl> | ||
| $/ = " | $/ = " | ||
| while (< | while (< | ||
| print "< | print "< | ||
| } | } | ||
| + | </ | ||
| L' | L' | ||
| Il est possible de lire un fichier entier en un seul appel en utilisant la chaîne vide comme séparateur : | Il est possible de lire un fichier entier en un seul appel en utilisant la chaîne vide comme séparateur : | ||
| + | <code perl> | ||
| $/ = ""; | $/ = ""; | ||
| my $whole = < | my $whole = < | ||
| - | | + | </ |
| **Note**: une technique alternative, | **Note**: une technique alternative, | ||
| Ligne 131: | Ligne 150: | ||
| Il existe de nombreuses fonctions de formattage, dont les fameux //print//, //printf//, //write// et //format// : | Il existe de nombreuses fonctions de formattage, dont les fameux //print//, //printf//, //write// et //format// : | ||
| + | <code perl> | ||
| print FILE "Une information...\n"; | print FILE "Une information...\n"; | ||
| + | </ | ||
| **Note**: //write// n'est **pas** le pendant de //read// ! (Il n'est pas nécessaire, | **Note**: //write// n'est **pas** le pendant de //read// ! (Il n'est pas nécessaire, | ||
| Ligne 139: | Ligne 159: | ||
| Il est possible de changer momentanément le fichier de sortie par défaut, ce qui permet de rediriger facilement la sortie d'un sous-programme sans avoir à le modifier : | Il est possible de changer momentanément le fichier de sortie par défaut, ce qui permet de rediriger facilement la sortie d'un sous-programme sans avoir à le modifier : | ||
| + | <code perl> | ||
| make_report(); | make_report(); | ||
| my $previous = select(LOG); | my $previous = select(LOG); | ||
| make_report(); | make_report(); | ||
| select($previous); | select($previous); | ||
| + | </ | ||
| ===== Bufferisation ===== | ===== Bufferisation ===== | ||
| Ligne 151: | Ligne 171: | ||
| On peut facilement outrepasser ce cache, par exemple pour la sortie courante (STDOUT par défaut, mais cf. //select//) : | On peut facilement outrepasser ce cache, par exemple pour la sortie courante (STDOUT par défaut, mais cf. //select//) : | ||
| + | <code perl> | ||
| $| = 1; # Autoflush = 1 | $| = 1; # Autoflush = 1 | ||
| + | </ | ||
| Et il existe une syntaxe plus générique fonctionnant sur tous les descripteurs de fichiers, mais elle nécessite le module orienté objet : | Et il existe une syntaxe plus générique fonctionnant sur tous les descripteurs de fichiers, mais elle nécessite le module orienté objet : | ||
| + | <code perl> | ||
| use FileHandle; | use FileHandle; | ||
| | | ||
| open(my $tty, ">/ | open(my $tty, ">/ | ||
| $tty-> | $tty-> | ||
| + | </ | ||
perl/utilisation_des_fichiers.1237125265.txt.gz · Dernière modification : (modification externe)
