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 :

écrire un fichier texte a partir d'un datagridview


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut écrire un fichier texte a partir d'un datagridview
    Bonjour à tous !
    lorsque j'ai écrire un fichier texte à partir d'un datagridview, j'ai besoin d'adapter la forme de fichier texte
    par exemple
    000777555588886660001120190008556
    *0007775555500255zadi msra 1
    *0007775555500296zoka rima 1
    *0007775555500289noni zara 1
    *0007775555500289zoki moha 1
    le problème c'est : comment adaptée la mise en forme de numéro 1 juste avec le numéro 6 de Premier ligne
    merci d'avance à vos réponses

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Soit tu utilises la mise à longueur de chaque chaine (il faudra retirer les caractères excédentaires a la lecture) :

    Exemple (avec le point comme caractère de chargement) :
    000777555588886660001120190008556
    *0007775555500255zadi msra...............1
    *0007775555500296zoka rima...............1
    *0007775555500289noni zara................1
    *0007775555500289zoki moha...............1


    Toutes les valeurs numériques peuvent aisément être converties en chaînes par CType ou ToString et toutes les chaînes doivent être ajustées à une longueur convenable.
    Les méthodes PadRight et PadLeft de la classe String servent à compléter une chaîne en reproduisant un caractère donné jusqu’à l’obtention de la longueur souhaitée. De plus la chaîne traitée est alignée à droite ou à gauche selon la méthode choisie. La méthode SubString de la classe String permet de tronquer les chaînes trop longues. Les caractères excédentaires peuvent être enlevés à droite ou à gauche selon le paramétrage de la méthode.

    S = UneChaine.PadRight(6,"+"c) ' Si UneChaine est 1234, le résulat S vaut 1234++
    S = UneChaine.PadLeft(6,"~"c) ' Si UneChaine est 1234, le résulat S vaut ~~1234
    S = UneChaine.Substring(0, 4) ' Si UneChaine est 123456, le résulat S vaut 1234
    S = UneChaine.Substring(UneChaine.Length - 4, 4) ' Si UneChaine est 123456, le résulat S vaut 3456

    Lors de la lecture des enregistrements, les méthodes TrimStart et TrimEnd de la classe String permettent la suppression aisée des caractères ajoutés. La méthode Trim sans paramètre ôte les espaces à gauche et à droite.

    S = UneChaine.TrimStart("~") ' Si UneChaine est ~~1234, le résulat S vaut 1234
    S = UneChaine.TrimEnd("+") ' Si UneChaine est 1234++, le résulat S vaut 1234
    S = UneChaine.TrimStart() ' Enlève les espaces à gauche
    S = UneChaine.TrimEnd() ' Enlève les espaces à droite
    Soit tu utilises un séparateur (sur base duquel tu peux relire les données, quelle que soit leur longueur) :

    Exemple (avec ~ comme caractère de séparation) :
    00077755558888666~000112019000855~6~
    *0007775555500255~zadi msra~1~
    *0007775555500296~zoka rima~1~
    *0007775555500289~noni zara~1~
    *0007775555500289~zoki moha~1~

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     ' Lecture des données séparées par ~ 
            Dim Ligne As String
            Dim SeparateurSplit As Char() = {"~"}
            Dim LesChamps() As String  ' C'est une table de chaines
     
            NomFichier =  ' .... Ici, le nom avec chemin du fichier à lire
            LeFichierALire = New StreamReader(NomFichier, System.Text.Encoding.Default)
     
     
            Do Until LeFichierALire.Peek = -1               ' Lire le fichier ligne par ligne
                Ligne = LeFichierALire.ReadLine()   ' Lire une ligne
                LesChamps = Ligne.Split(SeparateurSplit)  ' Remplissage  de la table de chaines
     
              ' Ici, utiliser les données selon objectifs poursuivis, par exemple 
              ' les affichier avec MessageBox
     
                        MessageBox.Show("Le premier champs est : " & LesChamps(0))
                        MessageBox.Show("Le deuxième champs est : " & LesChamps(1))
                        MessageBox.Show("Le troisième champs est :  " & LesChamps(2))
     
               ' ... ... ...
     
            Loop
     
            LeFichierALire.Close()
            LeFichierALire.Dispose()

    ... et on peut trouver d'autres solutions !

    J'espère que ceci t'aidera

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut
    merci de votre réponse

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut
    j'ai pas besoin de supprimer espace j besoin Une espace adapté à la fin de chaque ligne ensuite numéro 1
    le premier line -------------------------
    Les autres lignes(Espace) 1
    le numéro 1 et même niveau que le numéro 6 de première ligne

  5. #5
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    OK mais il faut m'en dire plus

    Comment sont tes textes dans le programme, avant d'être envoyés dans le fichier ?
    Le plus simple serait que tu envoies la partie de ton code qui écrit le fichier.

    Par exemple, si ta première chaine est dans une variable ChaineBase :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChaineBase = "000777555588886660001120190008556"
    Il est facile de connaitre la position du dernier caractère, le caractère "6" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DernierePosition = ChaineBase.Lenght -1
    Si ta deuxième chaine est dans une variable AutreChaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AutreChaine = "*0007775555500255zadi msra 1"
    Alors il est possible de déplacer le dernier caractère, le caractère "1", à une position égale à celle du "6" de la première chaine.
    Mais pour cela, il faudra obligatoirement ajouter des blancs dans ta chaine : il n'est pas possible de créer une chaine avec des caractères inexistants, ni dans une variable, ni dans aucun fichier.
    Mais si l'opération t'intéresse, je pourrai (peut-être) la programmer sur tes variables.

    Attention encore que mon résonnement porte sur la position réelle des caractères. Le fichier ouvert avec NotePad ne montrera pas un alignement parfait avec des caractères proportionnels. Par exemple, ce qui sera parfaitement aligné en caractères "Courier New", ne le sera pas en caractères "Arial".


  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut
    super merci
    voila ma code pour aide moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Dim objStreamWriter As TextWriter = New StreamWriter("D:\date&virment.txt")
            objStreamWriter.Write("*" & DataGridView2.Rows(0).Cells(1).Value & DataGridView2.Rows(0).Cells(2).Value & DataGridView2.Rows(0).Cells(3).Value.ToString() & DataGridView2.Rows(0).Cells(4).Value.ToString("0000000000000") & DataGridView2.Rows(0).Cells(4).Value.ToString(0) & DataGridView2.Rows(0).Cells(5).Value.ToString(0) & DataGridView2.Rows(0).Cells(6).Value.ToString(0))
            objStreamWriter.WriteLine("")
            For i As Integer = 0 To DataGridView1.Rows.Count - 2 Step +1
                objStreamWriter.Write("*" & DataGridView1.Rows(i).Cells(2).Value.ToString() & "" & DataGridView1.Rows(i).Cells(3).Value.ToString() & " " & DataGridView1.Rows(i).Cells(4).Value.ToString() & vbTab & 1)
                objStreamWriter.WriteLine("")
     
            Next
            objStreamWriter.Close()
    c'est possible aide-moi au niveau de code 😊

  7. #7
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Besoin de précisions ...

    Quel est le rapport entre chaque partie de la chaine et les différentes cellules du DataGridView ?

    L'exemple suivant est-il correct ?

    Si AutreChaine = "*0007775555500255zadi msra 1" .

    Cells(0) ==> ???
    Cells(1) ==> "0007775555500255"
    Cells(2) ==> "zadi"
    Cells(3) ==> "msra"
    Cells(4) ==> ????

    Et puis, dans la 1ère ligne de code d'impression, tu utilises un Cells(5) et non ensuite : que contient Cells(5) ?

    Je dois savoir aussi quelles sont les cellules dont la longueur peut changer ?

    Cells(0) ==> ???
    Cells(1) ==> Longueur toujours pareille (ex : "0007775555500255")
    Cells(2) ==> Longueur variable (ex : "zadi", "zaahdi")
    Cells(3) ==> Longueur variable (ex : "msra", "harazem")
    Cells(4) ==> ????

    Je ne te promets pas de clôturer ce soir encore, mais demain matin bien sûr.


  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut
    la ligne (01) est chargée à partir DataGridView2 j'ai pris la ligne numéro 1 seulement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       objStreamWriter.Write("*" & DataGridView2.Rows(0).Cells(1).Value & DataGridView2.Rows(0).Cells(2).Value & DataGridView2.Rows(0).Cells(3).Value.ToString() & DataGridView2.Rows(0).Cells(4).Value.ToString("0000000000000") & DataGridView2.Rows(0).Cells(4).Value.ToString(0) & DataGridView2.Rows(0).Cells(5).Value.ToString(0) & DataGridView2.Rows(0).Cells(6).Value.ToString(0))
            objStreamWriter.WriteLine("")
    Détaillée :
    Rew0c1&Rew0c2&Rew0c3~Rew0c6
    et les autres lignes à partir d'un autre DataGridView1 et
    je prendre tous les lignes rew0~j c o~i
    remarque : vous êtes dans le bon sens que votre question et juste : votre exemple et juste j'explique seulement.
    Cells(0)===>> ID pas intéressant

  9. #9
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Je te propose d'essayer le code suivant à la place de celui que tu as envoyé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
            Dim objStreamWriter As TextWriter = New StreamWriter("D:\date&virment.txt")
     
            Dim LigneAEnregistrer As String  ' Chaine à construire dans la boucle FOR pour obtenir le formatage souhaité
     
            Dim ChaineBase As String = "000777555588886660001120190008556" ' remplacer par la 1ère ligne necessaire, peut-être que c'est :
     
            Dim LongueurChaineBase As Integer = ChaineBase.Length
     
            ' Je ne comprends pas l'utilité de ce premier objStreamWriter.Write("*" & DataGridView2.Rows(0). ... ... 
            '??? objStreamWriter.WriteLine("*" & DataGridView2.Rows(0).Cells(1).Value & DataGridView2.Rows(0).Cells(2).Value & DataGridView2.Rows(0).Cells(3).Value.ToString() & DataGridView2.Rows(0).Cells(4).Value.ToString("0000000000000") & DataGridView2.Rows(0).Cells(4).Value.ToString(0) & DataGridView2.Rows(0).Cells(5).Value.ToString(0) & DataGridView2.Rows(0).Cells(6).Value.ToString(0))
            'et je crois que ce qu'il faut (d'après ton 1er exemple) c'est ceci :
            objStreamWriter.WriteLine(ChaineBase)  ' quand ChaineBase est bien construite (ci-dessus)
     
            ' pas besoin d'écrire les WriteLine supplémentaires, suffit de le faire directement
            '' ''objStreamWriter.Write("*" & DataGridView2.Rows(0).Cells(1).Value & DataGridView2.Rows(0).Cells(2).Value & DataGridView2.Rows(0).Cells(3).Value.ToString() & DataGridView2.Rows(0).Cells(4).Value.ToString("0000000000000") & DataGridView2.Rows(0).Cells(4).Value.ToString(0) & DataGridView2.Rows(0).Cells(5).Value.ToString(0) & DataGridView2.Rows(0).Cells(6).Value.ToString(0))
            '' ''objStreamWriter.WriteLine("")
     
            For i As Integer = 0 To DataGridView1.Rows.Count - 2 Step +1
     
                ' Ici, je décompose tout pour mieux comprendre ...  :D)))
     
                Dim PartieDebut As String = "*"   ' Ainsi, c'est possible de mettre autre chose : **, #, @, Blabla, ...
                Dim Partie1 As String = DataGridView1.Rows(i).Cells(1).Value.ToString() ' Par exemple "0007775555500255"   
                Dim Partie2 As String = DataGridView1.Rows(i).Cells(2).Value.ToString() ' Par exemple "zadi" 
                Dim Partie3 As String = DataGridView1.Rows(i).Cells(3).Value.ToString() ' Par exemple "msra" 
                Dim DernierePartie As String = "1"   ' Ainsi, c'est possible de mettre autre chose : 5, 7, 10, 102, ...
     
                Dim DimensionJusqueFinPartie3 As Integer
                Dim NombreBlancsAPlacerAvantDernierePartie As Integer
     
                LigneAEnregistrer = PartieDebut & Partie1 & Partie2 & " " & Partie3
                DimensionJusqueFinPartie3 = LigneAEnregistrer.Length
                NombreBlancsAPlacerAvantDernierePartie = LongueurChaineBase - DimensionJusqueFinPartie3 - DernierePartie.Length
                LigneAEnregistrer &= DernierePartie.PadLeft(NombreBlancsAPlacerAvantDernierePartie - 1, " "c)
     
                objStreamWriter.WriteLine(LigneAEnregistrer)
     
     
                '' ''objStreamWriter.Write("*" & DataGridView1.Rows(i).Cells(2).Value.ToString() & "" & DataGridView1.Rows(i).Cells(3).Value.ToString() & " " & DataGridView1.Rows(i).Cells(4).Value.ToString() & vbTab & 1)
                '' ''objStreamWriter.WriteLine("")
     
            Next
            objStreamWriter.Close()
    Attention que pour que ce soit aligné quand tu regardes le résultat avec NotePad, il faut afficher en Courier New.


  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut
    Merci beaucoup ... Je ne sais pas comment vous remercier Merci beaucoup, mon professeur .j'ai essayé

Discussions similaires

  1. Comment écrire un fichier texte au format MS-DOS ?
    Par thierrybo dans le forum Débuter
    Réponses: 2
    Dernier message: 21/07/2009, 13h37
  2. Ecrire sur un fichier texte a partir d'un URL
    Par nazgul66 dans le forum Applets
    Réponses: 5
    Dernier message: 24/06/2009, 09h55
  3. lecture d'un fichier text a partir de vb.net
    Par essadiki_ista dans le forum VB.NET
    Réponses: 2
    Dernier message: 04/05/2007, 08h14
  4. génération d'un fichier texte a partir d'une BDD
    Par devoracle dans le forum Forms
    Réponses: 7
    Dernier message: 02/11/2006, 11h11
  5. Comment écrire un fichier texte au format MS-DOS ?
    Par fredfred dans le forum Langage
    Réponses: 9
    Dernier message: 20/01/2005, 09h00

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