web-dev-qa-db-fra.com

Commande unique pour ouvrir un fichier ou le créer et ajouter les données

J'aimerais savoir s'il est possible d'utiliser une seule commande (avec des options/des spécificateurs) pour Fortran:

  1. ouvre un fichier s'il existe et ajoute des données .__ (ceci peut être fait avec: open(unit=40,file='data.data',Access = 'append',Status='old') mais si le fichier n'existe pas, une erreur d'exécution est générée)

  2. créez le fichier s'il n'existe pas et écrivez des données.

J'utilise actuellement inquire pour vérifier si le fichier existe ou non, mais je dois encore utiliser l'instruction open pour ajouter ou écrire des données.

15
Matteo Parsani

Autant que je sache, la seule solution safe consiste à procéder comme vous le faites déjà, en utilisant différentes instructions open pour les différents cas:

program proba
  implicit none

  logical :: exist

  inquire(file="test.txt", exist=exist)
  if (exist) then
    open(12, file="test.txt", status="old", position="append", action="write")
  else
    open(12, file="test.txt", status="new", action="write")
  end if
  write(12, *) "SOME TEXT"
  close(12)
end program proba

Vous pouvez être intéressé par ma bibliothèque Fortran d’interface vers les appels système de fichiers libc (modFileSys) , qui pourrait au moins vous épargner la variable logique et l’instruction inquire en interrogeant directement l’état du fichier:

if (file_exists("test.txt")) then
    ...
else
    ...
end if

mais bien sûr, vous pouvez facilement programmer vous-même une fonction similaire, et surtout cela ne vous épargnera pas des deux déclarations open ...

22
Bálint Aradi
open(61,file='data.txt',action='write',position='append')
write(61,*) 'hey'
close(61)

Cela va ajouter à un fichier existant, sinon créer et écrire. Ajouter status='unknown' serait équivalent.

4
Jonatan Öström

si vous remplacez le statut «ancien» par «inconnu», vous n'obtiendrez pas l'erreur d'exécution si le fichier existe ou maintenant.

Merci

4
Nick

Dans l'instruction open, ajoutez l'attribut access comme suit:

Open(unit=031,file='filename.dat',form='formatted',status='unknown',access='append')

L'instruction ci-dessus ouvrira le fichier sans détruire les anciennes données et la commande write ajoutera les nouvelles lignes du fichier . La solution la plus simple pour fortran 90.

0
Mubeena Shaikh