OUVERT
Fonction
L'instruction OPEN peut être utilisée pour connecter un fichier externe existant à une unité, créer un fichier externe préconnecté, créer un fichier externe et le connecter à une unité ou modifier certains spécificateurs d'une connexion entre un fichier externe et une unité.
Syntaxe
- liste_ouverte
- est une liste qui doit contenir soit un spécificateur d'unité ([ UNIT=u ])
ou un NEWUNIT= spécificateur
. La liste peut éventuellement contenir l'un des autres spécificateurs valides. Lorsque la liste contient plusieurs spécificateurs, utilisez une virgule (,) comme séparateur. Les spécificateurs valides sont les suivants: - [ UNIT = ] u
- est un spécificateur d'unité dans lequel u doit être un identificateur d'unité externe dont la valeur n'est pas un astérisque. Un identificateur d'unité externe fait référence à un fichier externe qui est représenté par une expression entière. L'expression entière possède l'une des valeurs suivantes:
- Valeur comprise entre 1 et 2147483647
Une valeur NEWUNIT
- ACCESS= exp_charr
- indique la méthode d'accès pour la connexion du fichier. char_expr est une expression de caractère scalaire dont la valeur, lorsqu'un blanc de fin est supprimé, est SEQUENTIAL, DIRECT ou STREAM. Si ACCESS= est DIRECT, RECL= doit être spécifié.
Si ACCESS= est STREAM, RECL= ne doit pas être spécifié
.SEQUENTIAL est la valeur par défaut, pour laquelle RECL= est facultatif
- ACTION= exp_caractères
- indique les opérations d'entrée/sortie autorisées. char_expr est une expression de caractère scalaire dont la valeur est évaluée à READ, WRITE ou READWRITE. Si READ est spécifié, les instructions WRITE, PRINT et ENDFILE ne peuvent pas faire référence à cette connexion. Si WRITE est spécifié, les instructions READ ne peuvent pas faire référence à cette connexion. La valeur READWRITE permet à toute instruction d'entrée-sortie de faire référence à cette connexion. Si le spécificateur ACTION= est omis, la valeur par défaut dépend des droits d'accès réels aux fichiers:
- Si le spécificateur STATUS= a la valeur OLD ou UNKNOWN et que le fichier existe déjà:
- Le fichier est ouvert avec READWRITE
- Si ce qui précède n'est pas possible, le fichier est ouvert avec READ
- Si aucun des éléments ci-dessus n'est possible, le fichier est ouvert avec WRITE.
- Si le spécificateur STATUS= a la valeur NEW, REPLACE, SCRATCH ou UNKNOWN et que le fichier n'existe pas:
- Le fichier est ouvert avec READWRITE
- Si ce qui précède n'est pas possible, le fichier est ouvert avec WRITE.
- Si le spécificateur STATUS= a la valeur OLD ou UNKNOWN et que le fichier existe déjà:
- ASYNCH= exp_charr (extensionIBM )
- est un spécificateur d'E-S asynchrone qui indique si une unité explicitement connectée doit être utilisée pour les E-S asynchrones.
char_expr est une expression de caractère scalaire dont la valeur est YES ou NO. YES indique que les instructions de transfert de données asynchrones sont autorisées pour cette connexion. NO indique que les instructions de transfert de données asynchrones ne sont pas autorisées pour cette connexion. La valeur spécifiée se trouve dans l'ensemble des méthodes de transfert autorisées pour le fichier. Si ce spécificateur est omis, la valeur par défaut est NO.
Les unités préconnectées sont connectées avec une valeur ASYNCH= de NO.
La valeur ASYNCH= d'une unité connectée implicitement est déterminée par la première instruction de transfert de données exécutée sur l'unité. Si la première instruction effectue un transfert de données asynchrone et que le fichier en cours de connexion implicite permet des transferts de données asynchrones, la valeur ASYNCH= est YES. Sinon, la valeur ASYNCH= est NO.
- ASYNOUS=exp_caractères (fortran 2003)
- indique si les E-S asynchrones sur l'unité sont autorisées ou non.
char_expr est une expression de caractère scalaire dont la valeur est YES ou NO. Si char_expr est la valeur YES , les E-S asynchrones sur l'unité sont autorisées. Si char_expr est la valeur NO , les E-S asynchrones sur l'unité ne sont pas autorisées. Si ASYNCHRONOUS= n'est pas présent, la valeur par défaut est NO.
Un
ASYNCH= spécificateur
et un
ASYNCHRONOUS= spécificateur
ne doivent pas apparaître sur la même instruction OPEN , la seconde étant ignorée.
- BLANK= exp_caractères
- contrôle l'interprétation par défaut des blancs lorsque vous utilisez une spécification de format. char_expr est une expression de caractère scalaire dont la valeur, lorsque des blancs de fin sont supprimés, est NULL ou ZERO. Si BLANK= est spécifié, vous devez utiliser FORM='FORMATTED'. Si BLANK= n'est pas spécifié et que vous spécifiez FORM='FORMATTED', NULL est la valeur par défaut.
- CONVERT = exp_caractères
- indique l'ordre des octets pour les opérations d'E-S sur les fichiers de données non formatés. char_expr est une expression de caractère scalaire dont la valeur doit être NATIVE, BIG_ENDIANou LITTLE_ENDIAN. Si la valeur est NATIVE ou BIG_ENDIAN, l'ordre des octets au format big endian est utilisé et aucune conversion n'est nécessaire. Si la valeur est LITTLE_ENDIAN, l'ordre des octets des données et des marqueurs d'enregistrement est converti lors de l'exécution.
- DECIMAL= exp_charr (Fortran 2003)
- indique le mode d'édition décimal par défaut de l'unité correspondante. char_expr est une expression de caractère scalaire dont la valeur doit être POINT ou COMMA. Si DECIMAL= n'est pas spécifié, le mode séparateur décimal est appliqué par défaut.
- DELIM= exp_caractères
- indique le délimiteur utilisé, le cas échéant, pour délimiter les constantes de caractères écrites avec un formatage de liste ou de liste de noms. char_expr est une expression de caractère scalaire dont la valeur doit être APOSTROPHE, QUOTEou NONE. Si la valeur est APOSTROPHE, les apostrophes délimitent les constantes de caractères et toutes les apostrophes dans les constantes de caractères sont doublées. Si la valeur est QUOTE, les guillemets délimitent les constantes de caractères et tous les guillemets dans les constantes de caractères sont doublés. Si la valeur est NONE, les constantes de caractères ne sont pas délimitées et aucun caractère n'est doublé. La valeur par défaut est NONE. Le spécificateur DELIM= est autorisé uniquement pour les fichiers connectés pour les entrées-sorties formatées, bien qu'il soit ignoré lors de l'entrée d'un enregistrement formaté.
- ENCODING= exp_charr (Fortran 2003)
- indique le format de codage du fichier. char_expr est une expression de caractère scalaire dont la valeur, lorsqu'un blanc de fin est supprimé, est DEFAULT. Le spécificateur ENCODING= ne doit apparaître que dans les instructions d'E-S formatées. En cas d'omission, la valeur par défaut est DEFAULT.
- ERR= libellé_stm
- est un spécificateur d'erreur qui spécifie le libellé d'instruction d'une instruction exécutable dans la même unité de portée vers laquelle le contrôle doit être transféré en cas d'erreur. Le codage du spécificateur ERR= supprime les messages d'erreur.
- FILE= exp_caractères
est un spécificateur de fichier qui indique le nom du fichier à connecter à l'unité spécifiée.
char_expr est une expression de caractère scalaire dont la valeur, lorsqu'un blanc de fin est supprimé, est un nom de fichier système AIX® d'exploitation valide. Si le spécificateur de fichier est omis et qu'il est obligatoire, l'unité devient implicitement connectée (par défaut) à fort.u, où u est l'unité spécifiée avec les zéros non significatifs supprimés. Utilisez l'option d'exécution UNIT_VARS pour autoriser l'utilisation de noms de fichiers alternatifs pour les fichiers qui sont implicitement connectés.Remarque: un nom de fichier système AIX d'exploitation valide doit avoir un nom de chemin d'accès complet d'une longueur totale ≤ 1023 caractères, chaque nom de fichier devant comporter ≤ 255 caractères (bien que le nom de chemin d'accès complet n'ait pas besoin d'être spécifié).
- FORM= exp_caractères
- indique si le fichier est connecté pour les entrées-sorties formatées ou non formatées. char_expr est une expression de caractère scalaire dont la valeur, lorsque des blancs de fin sont supprimés, est FORMATTED ou UNFORMATTED. Si vous connectez le fichier pour l'accès séquentiel, FORMATTED est la valeur par défaut. Si vous connectez le fichier pour l'accès direct
ou l'accès au flux
, UNFORMATTED est la valeur par défaut. - IOMSG= iomsg_variable (Fortran 2003)
- est un spécificateur d'état d'entrée/sortie qui spécifie le message renvoyé par l'opération d'entrée/sortie. iomsg_variable est une variable scalaire de type caractère par défaut. Il ne doit pas s'agir d'une variable protégée sans pointeur associée à une utilisation. Lorsque l'exécution de l'instruction d'entrée/sortie contenant ce spécificateur est terminée, iomsg_variable est défini comme suit:
- Si une condition d'erreur, de fin de fichier ou de fin d'enregistrement se produit, un message explicatif est affecté à la variable comme par affectation.
- Si aucune condition de ce type ne se produit, la valeur de la variable n'est pas modifiée.
- IOSTAT = ios
- Spécificateur d'état d'entrée/sortie pour l'état de l'opération d'entrée/sortie. ios est une variable entière scalaire. Lorsque l'exécution de l'instruction d'entrée/sortie contenant ce spécificateur est terminée, ios est défini avec:
- Valeur zéro si aucune condition d'erreur ne se produit
- Valeur positive si une erreur se produit
- NEWUNIT = var (Fortran 2008)
- un spécificateur d'entrée-sortie qui spécifie la valeur NEWUNIT pour la connexion. var est une variable entière par défaut scalaire. La valeur NEWUNIT est un nombre négatif inférieur à -2 et différent du numéro d'unité de tout fichier actuellement connecté. Si vous spécifiez le spécificateur NEWUNIT= dans l'instruction OPEN , vous devez également spécifier le spécificateur STATUS= avec la valeur SCRATCH ou spécifier le spécificateur FILE= .
- PAD= exp_caractères
- indique si les enregistrements d'entrée sont complétés par des blancs. char_expr est une expression de caractère scalaire qui doit avoir pour résultat YES ou NO. Si la valeur est YES, un enregistrement d'entrée formaté est rempli avec des blancs si une liste d'entrée est spécifiée et que la spécification de format requiert plus de données d'un enregistrement que ne le contient l'enregistrement. Si NO est spécifié, la liste d'entrée et la spécification de format ne doivent pas nécessiter plus de caractères d'un enregistrement que l'enregistrement ne le contient. La valeur par défaut est YES. Le spécificateur PAD= est autorisé uniquement pour les fichiers connectés pour les entrées-sorties formatées, bien qu'il soit ignoré lors de la sortie d'un enregistrement formaté.
Si l'option de compilation -qxlf77 spécifie la sous-option noblankpad et que le fichier est connecté pour une entrée / sortie directe formatée, la valeur par défaut est NO lorsque le spécificateur PAD= est omis.
- POSITION= exp_caractères
- indique la position d'un fichier connecté pour un accès séquentiel ou en flux. Un fichier qui n'existait pas précédemment est positionné à son point initial. char_expr est une expression de caractère scalaire dont la valeur, lorsqu'un blanc de fin est supprimé, est ASIS, REWINDou APPEND. REWIND positionne le fichier à son point initial. APPEND positionne le fichier avant l'enregistrement endfile ou, s'il n'y a pas d'enregistrement endfile, au point terminal. ASIS laisse la position inchangée. La valeur par défaut est ASIS , sauf dans les cas suivants:
- La première instruction d'entrée-sortie (autre que l'instruction INQUIRE ) faisant référence à l'unité après l'instruction OPEN est une instruction WRITE et:
- Le spécificateur STATUS= est UNKNOWN et l'option de compilation -qposition spécifie appendunknown, ou
- Le spécificateur STATUS= est OLD et l'option de compilation -qposition spécifie appendold.
Dans de tels cas, la valeur par défaut du spécificateur POSITION= est APPEND au moment de l'exécution de l'instruction WRITE .
- La première instruction d'entrée-sortie (autre que l'instruction INQUIRE ) faisant référence à l'unité après l'instruction OPEN est une instruction WRITE et:
- RECL= exp_entier
indique la longueur de chaque enregistrement dans un fichier connecté pour un accès direct ou la longueur maximale d'un enregistrement dans un fichier connecté pour un accès séquentiel. integer_expr est une expression entière dont la valeur doit être positive. Ce spécificateur doit être présent lorsqu'un fichier est connecté pour un accès direct. Pour les entrées-sorties formatées, la longueur correspond au nombre de caractères de tous les enregistrements contenant des données de type caractères. Pour les entrées-sorties non formatées, la longueur correspond au nombre d'octets requis pour la forme interne des données. La longueur d'un enregistrement séquentiel non formaté ne compte pas les zones de quatre octets entourant les données.

Si RECL= est omis lorsqu'un fichier est connecté pour un accès séquentiel en 32 bits, la longueur est 2 * *31-1, moins le caractère de fin d'enregistrement. Pour un fichier séquentiel formaté en 32 bits, la longueur d'enregistrement par défaut est 2 * *31-2. Pour un fichier non formaté accessible en 32 bits, la longueur d'enregistrement par défaut est 2 * *31-9.
Pour un fichier inaccessible de manière aléatoire en 32 bits, la longueur par défaut est 2 * *15 (32 768).
Si RECL= est omis lorsqu'un fichier est connecté pour un accès séquentiel en 64 bits, la longueur est 2 * *63-1, moins le caractère de fin d'enregistrement. Pour un fichier séquentiel formaté en 64 bits, la longueur d'enregistrement par défaut est 2 * *63-2. Pour un fichier non formaté en 64 bits, la longueur d'enregistrement par défaut est 2 * *63-17 lorsque l'option d'exécution UWIDTH est définie sur 64.

- ROUND= exp_charr (Fortran 2003)
indique la valeur actuelle du mode d'arrondi d'E-S pour l'entrée et la sortie formatées. Le ROUND= peut être modifié par d'autres instructions. S'il est omis, le processeur peut choisir le mode d'arrondi. char_expr a pour résultat UP, DOWN, ZERO, NEAREST, COMPATIBLE ou PROCESSOR_DEFINED
Le mode d'arrondi permet de spécifier comment les nombres décimaux sont convertis en représentation interne (c'est-à-dire en binaire) à partir d'une représentation de caractères et vice versa lors de l'entrée et de la sortie formatées. Les modes d'arrondi ont les fonctions suivantes:
- En mode d'arrondi UP , la valeur de la conversion est la plus petite valeur supérieure ou égale à la valeur d'origine.
- Dans le mode d'arrondi DOWN , la valeur de la conversion est la plus grande valeur inférieure ou égale à la valeur d'origine.
- Dans le mode d'arrondi ZERO , la valeur de la conversion est la valeur la plus proche de la valeur d'origine et n'est pas supérieure en magnitude.
- Dans le mode d'arrondi NEAREST , la valeur de la conversion est la plus proche des deux valeurs représentables les plus proches. Si les deux valeurs sont également proches, la valeur paire est choisie. Dans les conversions d'arrondi IEEE, PLUS proche correspond au mode d'arrondi ieee_plus proche spécifié par la norme IEEE.
- Dans le mode d'arrondi COMPATIBLE , la valeur de la conversion est la plus proche des deux valeurs représentables les plus proches, ou la valeur la plus éloignée de zéro si elle est à mi-chemin entre ces deux valeurs.
- Dans le mode d'arrondi PROCESSOR_DEFINED , la valeur de la conversion dépend du processeur et peut correspondre aux autres modes. Dans IBM® Open XL Fortran, le mode d'arrondi PROCESSOR_DEFINED est le mode d'arrondi que vous choisissez dans le registre de contrôle à virgule flottante. Si vous ne définissez pas explicitement le registre de contrôle à virgule flottante, le mode d'arrondi par défaut est NEAREST.
- SIGN= exp_charr (Fortran 2003)
- indique le mode de signe en vigueur pour une connexion pour les entrées-sorties formatées. Si la valeur PLUSest affectée à char_expr , le processeur génère un signe plus dans toute position qui contient normalement un signe plus facultatif et supprime les signes plus dans ces positions si la valeur SUPPRESSest affectée à char_expr . char_expr peut également se voir affecter la valeur PROCESSOR_DEFINED , qui est le mode de signe par défaut et qui agit de la même manière que SUPPRESS. S'il n'y a pas de connexion ou si la connexion n'est pas destinée aux entrées-sorties formatées, la valeur UNDEFINEDest affectée à char_expr . Le mode de signature peut être temporairement modifié dans une seule instruction de transfert de données. A la fin de l'instruction, le mode de signature reprend sa valeur précédente.
- STATUS= exp_caractères
- indique l'état du fichier lorsqu'il est ouvert. char_expr est une expression de caractère scalaire dont la valeur, lorsqu'un blanc de fin est supprimé, est l'une des suivantes:
- OLD, pour connecter un fichier existant à une unité. Si OLD est spécifié, le fichier doit exister. Si le fichier n'existe pas, une condition d'erreur se produit.
- NEW, pour créer un nouveau fichier, connectez-le à une unité et changez le statut en OLD. Si NEW est spécifié, le fichier ne doit pas exister. Si le fichier existe déjà, une condition d'erreur se produit.
- SCRATCH, pour créer et connecter un nouveau fichier qui sera supprimé lorsqu'il sera déconnecté. SCRATCH ne doit pas être spécifié avec un fichier nommé (c'est-à-dire que FILE=char_expr doit être omis).
- REPLACE. Si le fichier n'existe pas déjà, il est créé et son statut passe à OLD. Si le fichier existe, il est supprimé, un nouveau fichier est créé avec le même nom et le statut passe à OLD.
- UNKNOWN, pour connecter un fichier existant ou pour créer et connecter un nouveau fichier. Si le fichier existe, il est connecté en tant que OLD. Si le fichier n'existe pas, il est connecté en tant que NEW.
UNKNOWN est la valeur par défaut.
règles
Si une unité est connectée à un fichier existant, une instruction OPEN peut être exécutée pour cette unité. Si le spécificateur FILE= n'est pas inclus dans l'instruction OPEN , le fichier à connecter à l'unité est identique au fichier auquel l'unité est connectée.
Si une OPEN contenant un spécificateur NEWUNIT= est exécutée avec succès, la variable spécifiée par NEWUNIT= reçoit une nouvelle valeur NEWUNIT. Cependant, si une erreur se produit pendant l'exécution de l'instruction OPEN la variable spécifiée par NEWUNIT= conserve sa valeur initiale. 
Si le fichier à connecter à l'unité n'est pas le même que le fichier auquel l'unité est connectée, l'effet est comme si une instruction CLOSE sans spécificateur STATUS= avait été exécutée pour l'unité immédiatement avant l'exécution de l'instruction OPEN .
Si le fichier à connecter à l'unité est identique au fichier auquel l'unité est connectée, seuls les spécificateurs BLANK=, DELIM=, PAD=, ERR=et IOSTAT= peuvent avoir une valeur différente de celle actuellement en vigueur. L'exécution de l'instruction OPEN entraîne l'application de toute nouvelle valeur pour les spécificateurs BLANK=, DELIM= ou PAD= , mais n'entraîne aucune modification des spécificateurs non spécifiés ou de la position du fichier. Les spécificateurs ERR= et IOSTAT= des instructions OPEN précédemment exécutées n'ont aucun effet sur l'instruction OPEN en cours. Si vous spécifiez le spécificateur STATUS= , il doit avoir la valeur OLD. Pour spécifier le même fichier que celui actuellement connecté à l'unité, vous pouvez spécifier le même nom de fichier, omettre le spécificateur FILE= ou spécifier un fichier lié symboliquement au même fichier.
Si un fichier est connecté à une unité, une instruction OPEN sur ce fichier et une autre unité ne peuvent pas être exécutées.
Si le spécificateur STATUS= a la valeur OLD, NEW ou REPLACE, le spécificateur FILE= est facultatif.
L'unité 0 ne peut pas être spécifiée pour la connexion à un fichier autre que le fichier préconnecté, le périphérique d'erreur standard, bien que vous puissiez modifier les valeurs des spécificateurs BLANK=, DELIM= et PAD= .
Si les spécificateurs ERR= et IOSTAT= sont définis et qu'une erreur est détectée, le transfert est effectué vers l'instruction spécifiée par le spécificateur ERR= et une valeur entière positive est affectée à ios.
Si IOSTAT= et ERR= ne sont pas spécifiés,- Le programme s'arrête si une erreur grave est détectée
- Le programme passe à l'instruction suivante si une erreur remédiable est détectée et que l'option d'exécution ERR_RECOVERY est définie sur YES. Si l'option est définie sur NO, le programme s'arrête.

Exemples

INTEGER unit_number
OPEN(newunit = unit_number, file = 'hello')
WRITE(unit_number, *) 'hello world'
CLOSE(unit_number)
Example 2:
! Open a new file with name fname
CHARACTER*20 FNAME
FNAME = 'INPUT.DAT'
OPEN(UNIT=8,FILE=FNAME,STATUS='NEW',FORM='FORMATTED')
OPEN (4,FILE="myfile")
OPEN (4,FILE="myfile", PAD="NO") ! Changing PAD= value to NO
! Connects unit 2 to a tape device for unformatted, sequential
! write-only access:
OPEN (2, FILE="/dev/rmt0",ACTION="WRITE",POSITION="REWIND", &
& FORM="UNFORMATTED",ACCESS="SEQUENTIAL",RECL=32767)
