IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

lecture dans un fichier


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Professeur de mathématique
    Inscrit en
    Septembre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Professeur de mathématique
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2016
    Messages : 2
    Par défaut lecture dans un fichier
    Bonjour.
    Je suis en train de convertir un ancien logiciel écrit en fortran iv en vb .net.
    >Le code qui fait presque 2000 lignes en fortran iv a été traduit en entier mais il me reste les entrées/sorties à traiter.
    Le code initial utilise des ordres

    read(5,101, end=9999) P0,P1,P2,P3,P4,P13,P14,P15
    avec le format 101 qui appelait un lecteur de cartes perforées que je veux remplacer en fichier texte séquentiel
    101 FORMAT(I2,1X,I2,1X,I2,1X,E9.2,1X,I2,E9.2,I2,A3)
    qui signifie que P0 est un entier sur 2 chiffres (I=integer) suivi d'un caractère blanc (1X) et de l'entier sur 2 chiffres P1, suivi d'un caractère blanc (1X) et de l'entier sur 2 chiffres P2 suivi de nouveau d'un blanc. Quand on arrive à P3, le format est E9.2 c'est-à-dire un nombre flottant (single) codé par mantisse sur 9 chiffres et exposant sur 2 chiffres, un espace, un entier sur 2 chiffres, P4, un flottant P13, un entier sur 2 chiffres P14,et une chaine de 3 caractères P15.

    Comment peut-on faire cela en vb .net ?
    Comment le faire selon le même format 101 en écriture car il y a des WRITE(6,101) P0,P1,P2,P3,P4,P13,P14,P15 ?

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Cela fait bien 40 ans que je n'ai pas utilisé FORTRAN et c'est un peu loin. En principe un fichier texte en VB, c'est une suite de caractères au format texte et la conversion en nombre ou en texte est faite à la lecture, ou à l'écriture.

    Avec:
    La conversion est faite implicitement par VB, au meilleur de ses "connaissances".

    Avec:

    La conversion doit être faite explicitement.

    L'idée de base, c'est de créer une ligne au format texte par ligne de données et de boucler.

    En supposant 10 lignes avec un texte suivi d'un deux-points avec une espace avant et une espace après le deux points et un entier.

    En écriture: (Attention, c'est de mémoire et non testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sub ÉcritEnTexte()
       Dim Flux as new TextWriter("c:\données\Test.txt")
       dim Àgauche as string = string.empty
       dim Àdroite as integer = 0
       dim LaLigne as string = string.empty
       for i as integer =0 to 9
          LaLigne = string.concat(Àgauche," : ",Àdroite.tostring , vbnewline)
          flux.write(LaLigne,vbnewline)
       next
       Flux.close
    end sub
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sub ÉcritEnTexte1()
       Dim Flux as new TextWriter("c:\données\Test.txt")
       dim Àgauche as string = string.empty
       dim Àdroite as integer = 0
       dim LaLigne as string = string.empty
       for i as integer =0 to 9
          LaLigne = Àgauche & " : " & Àdroite.tostring & vbnewline)
          flux.write(LaLigne,vbnewline)
       next
       Flux.close
    end sub
    Au lieu d'une boucle comptée, on peut aussi une boucle conditionnelle

    En lecture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub LireFichier()
       Dim Flux as new TextReader("c:\données\Test.txt")
       dim Àgauche as string = string.empty
       dim Àdroite as integer = 0
       dim LaLigne as string = string.empty
       dim réussi as boolean = false 'Pour utiliser tryparse. On peut aussi tester sans un if
       'si réussi = true (conversion réussie)
       'ou si réussi = false ((conversion ratée)
       Do while not flux.endofstream
          Àgauche = flux.read
          réussi = integer.tryparse(flux.read, Àdroite)
       next
       Flux.close
    end sub
    Tu peux aussi jeter un œil sur cet exemple. J'utilise le TextFieldParser pour lire un fichier texte (une partie de ta problématique) et le mettre dans une Datatable et choisir quelle(s) colonne(s) sera (seront) affichées dans un DataGridView. (Dans ton cas, c'est plutôt un bonus, mais la Datatable est très intéressante, si tu souhaites remplacer ton fichier texte par un fichier xml.)

  3. #3
    Candidat au Club
    Homme Profil pro
    Professeur de mathématique
    Inscrit en
    Septembre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Professeur de mathématique
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2016
    Messages : 2
    Par défaut
    Bonjour.

    Je vous fais part de la solution que j'ai retenu.

    Comme il ne semble pas y avoir de "print using", je suis amené à utilisé les formats numériques personnalisés, par exemple
    nombre.tostring("0.00000E+00") et de les lire par un val()

    Je vous remercie de votre aide.
    J'ai une question à poser:

    en fortran IV on peut appeler des sous-programmes en passant dans la liste d'appel des noms de tableaux, par exemple

    SUBROUTINE DEVAL(IRM1,R,SIZ)
    INTEGER SIZ
    REAL R
    COMPLEX IRM1(SIZ,SIZ)

    COMMENT PASSE-T-ON UN TABLEAU EN ARGUMENT EN vb.NET ? j'ai essayé plusieurs méthodes mais j'obtiens chaque fois une erreur avec BYREF, avec les dimensions du tableau IRM1() pas bon, IRM1(,) pas mieux, ...
    Merci de votre aide

Discussions similaires

  1. macros word et lecture dans un fichier excel
    Par antrax2013 dans le forum Windows
    Réponses: 2
    Dernier message: 01/10/2005, 19h05
  2. Réponses: 20
    Dernier message: 25/09/2005, 15h07
  3. Lecture dans un fichier
    Par unknown4 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 14/08/2005, 17h56
  4. [Débutant] Lecture dans un fichier texte
    Par babemagus dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/07/2005, 12h17
  5. Réponses: 12
    Dernier message: 14/06/2004, 13h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo