Suivant: , Monter: Terminal input/output   [Table des matières][Index]


27.1 \openin & \openout

Synopsis :

\openin numéro=nomfichier

ou :

\openout numéro=nomfichier

Ouvre un fichier pour y lire, ou pour y écrire. Le numéro doit être entre 0 et 15, comme dans \openin3 (dans LuaLaTeX numéro peut être entre 0 et 255).

Ici TeX ouvre le fichier le fichier presidents.tex en lecture.

\newread\fichierpresidents
\openin\fichierpresidents=presidents
\typeout{fichierpresidents vaut \the\fichierpresidents}
\read\fichierpresidents to\presidentligne
\typeout{\presidentligne}

La commande \newread alloue des numéros de flux d’entrée de 0 à 15 (il y a aussi une commande \newwrite). La variable \fichierpresidents est plus facile à mémoriser mais sous le capot ce n’est rien de plus qu’un numéro ; le premier \typeout donne queleque-chose du genre de ‘fichierpresidents vaut 1’. De plus, \newread garde la trace de l’allocation de sorte que si vous en utilisez trop alors vous obtiendrez une erreur du genre de ‘! No room for a new \read’. Le second \typeout produit la première ligne du fihcier, quelque-chose du genre de ‘1 Bonaparte, Louis-Napoléon’.

D’ordinaire TeX n’essaie pas d’ouvrir le fichier jusqu’à la prochaine éjection de page. Pour changer cela, utilisez \immediate\openin numéro=nomfichier ou \immediate\openout numéro=nomfichier.

Fermez les fichiers avec \closein numéro et \closeout numéro.

La façon dont LaTeX manipule les noms de fichiers varie selon les distributions, et peut même varier d’une version à l’autre d’une même distribution. Si le nom de fichier n’a pas d’extension alors TeX y ajoute un .tex. L’exemple suivant crée presidents.tex, y écrit une ligne, et le ferme.

\newwrite\fichierpresidents
\openout\fichierpresidents=presidents
\write\fichierpresidents{1 Bonaparte, Louis-Napoléon}
\closeout\fichierpresidents

Mais les noms de fichier avec un point peuvent causer des problèmes : si TeX tombe sur un nomfichier comme presidents.dat il se peut qu’il cherche d’abord presidents.dat.tex et ensuite presidents.dat, ou bien le contraire. La documentation de votre distribution devrait en dire plus, et si cela fonctionne pour vous tant mieux, mais pour assurer une portabilité complète le mieux et d’utiliser des noms de fichier ne contenant que les vingt-six lettres ASCII (insensible à la casse case-sensitive) et les dix chiffres, ainsi que les tiret de 8 ‘_’ et de 6 ‘-’, et en particulier sans point ni espace.

Pour \openin, si TeX ne peut pas trouver le fichier alors il ne produit pas une erreur. Il ne fait que considérer que ce flux n’est pas ouvert (ce qu’on peut vérifier avec \ifeof ; on peut également recourir à la commande \InputIfFileExists, voir Class and package commands). Si vous essayer d’utiliser le même numéro deux fois, LaTeX ne produit pas d’erreur. Si vous essayer d’utiliser un mauvais numéro, alors vous obtiendrez un message d’erreur du genre de ‘! Bad number (16). <to be read again> = l.30 \openin16=test.jh’.


Suivant: , Monter: Terminal input/output   [Table des matières][Index]