2017-10-04 12 views
1

Je suis en train de lire les entiers dans cette ligne:lecture entiers de largeur inconnue dans Fortran

# 14 14 10 

en Fortran 2008.

Je tenté d'utiliser ce code:

read(21, "(A, I,I,I)") garbage, a, b, c 

mais ce n'est pas conforme standard. Intel Fortran émet un avertissement « Fortran 2008 does not allow this edit descriptor. [I] » et d'autres qeustions expliquer ce problème: Nonnegative width required in format stringError: Nonnegative width required in format string at (1)

Comment puis-je lire correctement les entiers de largeur inconnue en utilisant Fortran 2008? Je ne peux pas simplement spécifier I2, car je ne connais pas la largeur de l'entier à l'avance.

+1

Veuillez utiliser tag [tag: fortran] pour toutes les quations Fortran. Utilisez les balises de version en plus des questions spécifiques à la version. Y a-t-il une raison pour l'étiquette fortran95? –

+0

Vous ne pouvez pas utiliser seulement moi, ce n'est pas spécifique à 2008, c'est vrai dans toutes les versions. Vous demandez probablement probablement la conformité Fortran 2008 stricte même si vous ne le montrez pas. Mais c'est vrai aussi dans les versions antérieures. Il s'agit d'un doublon, veuillez repasser la question avec la balise [tag: fortran]. –

+0

Est-ce que cela signifie que j'ai besoin de connaître la largeur de l'entier à l'avance? – Stein

Répondre

2

Comme je l'ai laissé entrevoir dans les commentaires, vous pouvez facilement lire des éléments comme celui-ci avec la liste d'E/S. Le compilateur alors lui-même identifie quels caractères appartiennent à chaque élément dans la liste d'entrée et les analyse. Les éléments peuvent être séparés par des espaces, des virgules ou encore une nouvelle ligne.

read(21,*) garbage, a, b, c 

C'est la façon la plus courante de lire des choses de manière interactive, mais est également utile pour les listes d'analyse syntaxique des fichiers de données (CSV et similaires).

Si l'un des nombres n'était pas présent dans l'enregistrement d'entrée (ligne dans un fichier texte), la lecture continuerait sur l'enregistrement suivant.

+0

Vous devriez noter 'garbage' doit être déclaré une chaîne pour que cela fonctionne. – agentp

+0

Je suppose que c'est le cas, car il a le descripteur 'a' dans la question. –