Manipulation de fichiers Perl
Perl utilise une variable appelée type de descripteur de fichier pour manipuler les fichiers.
La lecture ou l'écriture de données à partir d'un fichier nécessite un descripteur de fichier.
Un descripteur de fichier est le nom d'une connexion E/S.
Perl fournit trois descripteurs de fichiers : STDIN, STDOUT et STDERR, qui représentent respectivement l'entrée standard, la sortie standard et la sortie d'erreur standard.
Pour ouvrir un fichier en Perl, vous pouvez utiliser la méthode suivante :
open FILEHANDLE, EXPR open FILEHANDLE sysopen FILEHANDLE, FILENAME, MODE, PERMS sysopen FILEHANDLE, FILENAME, MODE
Description du paramètre :
FILEHANDLE : handle de fichier, utilisé pour stocker un identifiant de fichier unique.
EXPR : une expression composée du nom du fichier et du type d'accès au fichier.
MODE : Type d'accès au fichier.
PERMS : bits d'autorisation.
Fonction Ouvrir
Dans le code suivant nous utilisons la fonction open pour ouvrir le fichier file.txt en mode lecture seule (<) :
open(DATA, "<file.txt");
< indique le mode lecture seule.
Les DATA dans le code sont le handle de fichier utilisé pour lire le fichier. L'exemple suivant ouvrira le fichier et affichera le contenu du fichier :
#!/usr/bin/perl open(DATA, "<file.txt") or die "file.txt 文件无法打开, $!"; while(<DATA>){ print "$_"; }
Le code suivant ouvre le fichier en écriture (. > ) file.txt:
open(DATA, ">file.txt") or die "file.txt 文件无法打开, $!";
> indique la méthode d'écriture.
Si vous devez ouvrir le fichier en mode lecture-écriture, vous pouvez ajouter un signe + avant les caractères > ou < :
open(DATA, "+<file.txt"); or die "file.txt 文件无法打开, $!";
Cette méthode ne supprimera pas le contenu original de le fichier. , le format est le suivant :
open DATA, "+>file.txt" or die "file.txt 文件无法打开, $!";
Si vous souhaitez ajouter des données au fichier, il vous suffit d'ouvrir le fichier en mode ajout avant d'ajouter les données :
open(DATA,">>file.txt") || die "file.txt 文件无法打开, $!";
>. ;> signifie ajouter des données à la fin du fichier existant. Si vous avez besoin de lire le contenu du fichier à ajouter, vous pouvez ajouter un signe + :
open(DATA,"+>>file.txt") || die "file.txt 文件无法打开, $!";
Le tableau suivant répertorie les différents modes d'accès :
模式 | 描述 |
---|---|
< 或 r | 只读方式打开,将文件指针指向文件头。 |
> 或 w | 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
>> 或 a | 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |
+< 或 r+ | 读写方式打开,将文件指针指向文件头。 |
+> 或 w+ | 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
+>> 或 a+ | 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |
Fonction Sysopen
sysopen est similaire à la fonction open, sauf que leurs formes de paramètres sont différentes.
L'exemple suivant ouvre le fichier en lecture et en écriture (+<filename) :
sysopen(DATA, "file.txt", O_RDWR);
Si vous devez effacer le fichier avant de le mettre à jour, la méthode d'écriture est la suivante :
sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );
Vous pouvez utiliser O_CREAT pour créer un nouveau fichier, O_WRONLY est le mode écriture seule, O_RDONLY est le mode lecture seule.
Le paramètre PERMS est une valeur d'attribut octal, indiquant les autorisations après la création du fichier. La valeur par défaut est 0x666.
Le tableau suivant répertorie les valeurs de mode possibles :
模式 | 描述 |
---|---|
O_RDWR | 读写方式打开,将文件指针指向文件头。 |
O_RDONLY | 只读方式打开,将文件指针指向文件头。 |
O_WRONLY | 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
O_CREAT | 创建文件 |
O_APPEND | 追加文件 |
O_TRUNC | 将文件大小截为零 |
O_EXCL | 如果使用O_CREAT时文件存在,就返回错误信息,它可以测试文件是否存在 |
O_NONBLOCK | 非阻塞I/O使我们的操作要么成功,要么立即返回错误,不被阻塞。 |
Fonction Fermer
Une fois le fichier utilisé, il est nécessaire de fermer le fichier pour rafraîchir les tampons d'entrée et de sortie associés au handle de fichier. La syntaxe de fermeture du fichier est la suivante :
close FILEHANDLE close
FILEHANDLE est le descripteur de fichier spécifié et renvoie true s'il est fermé avec succès.
close(DATA) || die "无法关闭文件";
Lecture et écriture de fichiers
Il existe plusieurs manières différentes de lire et d'écrire des informations dans des fichiers :
<FILEHANDL> La principale méthode de lecture des informations à partir d’un descripteur de fichier ouvert est l’opérateur <FILEHANDLE> Dans un contexte scalaire, il renvoie une seule ligne du descripteur de fichier. Par exemple :
#!/usr/bin/perl print "php中文网网址?\n"; $name = <STDIN>; print "网址:$name\n";
Une fois le programme ci-dessus exécuté, les informations suivantes seront affichées. Après avoir entré l'URL, l'instruction d'impression sera affichée :
<. 🎜>Lorsque nous utilisons l'opérateur <FILEHANDLE> ;, il renverra une liste de chaque ligne du descripteur de fichier, par exemple nous pouvons importer toutes les lignes dans un tableau.
Créez un fichier import.txt avec le contenu suivant :$ cat import.txt 1 2 3Lisez import.txt et placez chaque ligne dans le tableau @lines :
#!/usr/bin/perl open(DATA,"<import.txt") or die "无法打开数据"; @lines = <DATA>; print @lines; # 输出数组内容 close(DATA);Exécutez le programme ci-dessus, Le résultat de sortie est :
1 2 3fonction getc la fonction xgetc renvoie un seul caractère du FILEHANDLE spécifié, s'il n'est pas spécifié, renvoie STDIN :
getc FILEHANDLE
getc
Si une erreur se produit, ou dans le fichier Si le handle est à la fin du fichier, undef est renvoyé. fonction de lecture
la fonction de lecture est utilisée pour lire les informations à partir du descripteur de fichier du tampon. Cette fonction est utilisée pour lire des données binaires à partir d'un fichier.
read FILEHANDLE, SCALAR, LENGTH, OFFSET read FILEHANDLE, SCALAR, LENGTHDescription du paramètre :FILEHANDLE : descripteur de fichier, utilisé pour stocker un identifiant de fichier unique.
- SCALAIRE : Commencez à lire la position.
- LONGUEUR : La longueur du contenu lu.
- OFFSET : décalage.
- Renvoie le nombre d'octets lus si la lecture est réussie, 0 si à la fin du fichier, et undef si une erreur se produit.
print FILEHANDLE LIST
print LIST
print
Utiliser les descripteurs de fichiers et les fonctions d'impression Les résultats de l'exécution du programme peut être envoyée au périphérique de sortie (STDOUT : sortie standard), par exemple : print "Hello World!\n";Copie de fichierDans l'exemple suivant, nous ouvrirons un fichier existant file1.txt et lirons Take chaque ligne et écrivons-la dans le fichier file2.txt :
#!/usr/bin/perl
# 只读方式打开文件
open(DATA1, "<file1.txt");
# 打开新文件并写入
open(DATA2, ">file2.txt");
# 拷贝数据
while(<DATA1>)
{
print DATA2 $_;
}
close( DATA1 );
close( DATA2 );
Renommer le fichierDans l'exemple suivant, nous renommeons le fichier existant file1.txt en file2.txt, précisons Le répertoire est sous /usr/php/test/ : #!/usr/bin/perl
rename ("/usr/php/test/file1.txt", "/usr/php/test/file2.txt" );
fonction renames
n'accepte que deux paramètres et ne renomme que les fichiers existants.Supprimer des fichiers
L'exemple suivant montre comment utiliser la fonctionunlink
pour supprimer des fichiers :#!/usr/bin/perl unlink ("/usr/php/test/file1.txt");Spécifiez l'emplacement du fichier
Vous pouvez obtenir l'emplacement d'un fichier à l'aide de la fonction
tell
et spécifier l'emplacement dans le fichier en utilisant la fonctionrechercher : fonction tell
la fonction tell est utilisée pour obtenir l'emplacement du fichier :tell FILEHANDLE
tell
Si FILEHANDLE est spécifié, cette fonction renvoie la position du pointeur de fichier, en octets. S’il n’est pas spécifié, renvoie le descripteur de fichier sélectionné par défaut.
fonction de recherche
la fonction seek() consiste à lire ou à écrire des fichiers en déplaçant le pointeur de lecture et d'écriture du fichier via le descripteur de fichier, et lit et écrit en octets :
seek FILEHANDLE, POSITION, WHENCE<. 🎜>Description du paramètre :
- FILEHANDLE : descripteur de fichier, utilisé pour stocker un identifiant de fichier unique.
- POSITION : Indique le nombre d'octets à déplacer par le handle de fichier (pointeur de position de lecture et d'écriture).
- WHENCE : Indique la position de départ lorsque le descripteur de fichier (pointeur de position de lecture et d'écriture) commence à se déplacer. Les valeurs possibles sont 0, 1 et 2 représentant respectivement le début ; du fichier, la position actuelle et la fin du fichier.
seek DATA, 256, 0;
Informations sur le fichierL'opération sur le fichier Perl peut également être effectuée Testez d'abord si le fichier existe, s'il peut être lu et écrit, etc. Nous pouvons d'abord créer le fichier file1.txt, comme suit :
$ cat file1.txt www.php.cnrrreeExécutez le programme ci-dessus, le résultat de sortie est :
#/usr/bin/perl my $file = "/usr/test/php/file1.txt"; my (@description, $size); if (-e $file) { push @description, '是一个二进制文件' if (-B _); push @description, '是一个socket(套接字)' if (-S _); push @description, '是一个文本文件' if (-T _); push @description, '是一个特殊块文件' if (-b _); push @description, '是一个特殊字符文件' if (-c _); push @description, '是一个目录' if (-d _); push @description, '文件存在' if (-x _); push @description, (($size = -s _)) ? "$size 字节" : '空'; print "$file 信息:", join(', ',@description),"\n"; }L'opérateur de test de fichier est affiché dans le tableau ci-dessous :
操作符 | 描述 |
---|---|
-A | 文件上一次被访问的时间(单位:天) |
-B | 是否为二进制文件 |
-C | 文件的(inode)索引节点修改时间(单位:天) |
-M | 文件上一次被修改的时间(单位:天) |
-O | 文件被真实的UID所有 |
-R | 文件或目录可以被真实的UID/GID读取 |
-S | 为socket(套接字) |
-T | 是否为文本文件 |
-W | 文件或目录可以被真实的UID/GID写入 |
-X | 文件或目录可以被真实的UID/GID执行 |
-b | 为block-special (特殊块)文件(如挂载磁盘) |
-c | 为character-special (特殊字符)文件(如I/O 设备) |
-d | 为目录 |
-e | 文件或目录名存在 |
-f | 为普通文件 |
-g | 文件或目录具有setgid属性 |
-k | 文件或目录设置了sticky位 |
-l | 为符号链接 |
-o | 文件被有效UID所有 |
-p | 文件是命名管道(FIFO) |
-r | 文件可以被有效的UID/GID读取 |
-s | 文件或目录存在且不为0(返回字节数) |
-t | 文件句柄为TTY(系统函数isatty()的返回结果;不能对文件名使用这个测试) |
-u | 文件或目录具有setuid属性 |
-w | 文件可以被有效的UID/GID写入 |
-x | 文件可以被有效的UID/GID执行 |
-z | 文件存在,大小为0(目录恒为false),即是否为空文件, |