Suivant: \read, Monter: Terminal input/output [Table des matières][Index]
\openin
& \openout
Synopsis :
\openin numéro=nomfichier
ou :
\openout numéro=nomfichier
Ouvre un fichier pour y lire, ou pour y écrire. Pour la plupart des
moteurs, le numéro doit être entre 0 et 15, comme dans
\openin3
, dans LuaLaTeX numéro peut être entre 0 et
127.
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
quelque 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 fichier, 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) et les dix chiffres, ainsi que les tirets 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: \read, Monter: Terminal input/output [Table des matières][Index]