begin process at 2010 02 10 01:49:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Divers

 > 

Débutants

 > 

Mettre à jour une zone dans un fichier texte


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Mettre à jour une zone dans un fichier texte

vendredi 20 juillet 2007 à 23:25:45 | Mettre à jour une zone dans un fichier texte

Marianne108

bonjour
j'utilise un fichier texte comme source de données pour fusinner un document Word
le fichier texte à un enregistrement d'entête et des lignes de données comme suit :
Nom      Prenom      Date naissance N° facture  Montant_en_chiffre     Montant_en_lettre
Toto      Rémi          12/04/1985      12345                 200                          ???        
Zoro      Martin        04/02/1975      65831               300                           ???
---         ---               ----                  ---                     ---                           ???

je voudrais faire une lecture séquensiel,
récupérer la position du Montant_en_Chiffre ici colonne 5, données 200 et mettre à jour Montant_en _lettre ici colonne 6, données = deux cent
et ainsi de suite

A noter que les deux colonnes concernées sont dans le cas réél en colonne 60 et 80 à partir le la colonne 1 (Nom)
 
Comment écrire cela sous vb6?

samedi 21 juillet 2007 à 01:30:43 | Re : Mettre à jour une zone dans un fichier texte

jack

Administrateur CodeS-SourceS
Salut
On suppose que chaque donnée est séparée par des tabulations (ou largeur des données fixe) ?
De toute façon, c'est la même technique que pour lire des fichiers CSV.
Cherche donc CSV parmi les codes du site.

Si les largeurs des données sont fixes, tu peux lire et écrire en mode sequentiel :
- Crée un type propre à la structure de ta ligne :
Private Type monTypeDeLigne
   Dim Nom As String * 10
   Dim Prénom As String * 10
   ...
   Dim Montant_en_chiffre As String * 10
   ...
   Dim CaractèreDeFinDeLigne As String * 2   ' = le vbCrLf à la fin de la ligne
End
Type
Dim maLigne As monTypeDeLigne
- Ensuite, regarde du côté de l'instruction Open en mode d'accès séquentiel :
ff = FreeFile
Open "monFichier.txt" For Random Access Read Write As #ff Len = Len(maLigne)
   Do While Not EOF(ff)
      Get #ff, NoLigne, maLigne
      ' ton traitement ici pour modifier maLigne.Montant_en_chiffre
      Put #ff, NoLigne, maLigne
   Loop
Close #ff
L'avantage des fichiers séquentiels, c'est que tu peux demander à lire ou écrire des 'fiches' dans n'importe quel ordre.

Si tes données ne sont pas structurées, tu ne pourras pas écrire par dessus la donnée.
Il va te falloir lire une ligne du fichier, la traiter (ou pas), puis l'écrire dans un autre fichier.
Après traitement, tu peux supprimer l'original et renommer le nouveau fichier comme l'ancien.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
samedi 21 juillet 2007 à 14:51:10 | Re : Mettre à jour une zone dans un fichier texte

Marianne108

bonjour
je te remercie tout d'abord pour ta reponse qui est certainement bonne sauf que j'ai un problème par rapport à mon fichier Montant.txt
lorsque le programme exécute la ligne
Get #ff, NoLigne, MyRecord
le NoLigne est vide d'ou plantae erreur 63 
A noter que pour ce test j'ai crée manuellement un fichier .xls avec trois zones  
VS01, VS02  VS03  ensuite j'ai enregistré ce fichier sous .txt  
   4          D     200
le séparateur des zones étant la tabulation et pour les enregitrements entrée

Voici mon source

Private Type Record
 VS01 As String * 10
 VS02 As String * 10
 VS03 As String * 10
End Type
Sub Conversion()
                
Dim MyRecord As Record, NoLigne

Dim sValueLettres As String
Dim CaractèreDeFinDeLigne As String * 2

 ff = FreeFile
Open "C:\temp\Montant.txt" For Random Access Read Write As #ff Len = Len(MyRecord)
 
   Do While Not EOF(ff)
   Get #ff, NoLigne, MyRecord
      
    ' traitement
 If VS03 <> "" Then
         txt_Nb_Text = VS03
         Call ChiffresLettres_F((CDbl(txt_Nb_Text)), sValueLettres)
       
    Put #ff, NoLigne, MyRecord
 
 End If

Loop
Close #ff
  
End Sub

Merci pour ton aide

MM

samedi 21 juillet 2007 à 21:16:51 | Re : Mettre à jour une zone dans un fichier texte

MPi

Essaie comme ceci.
L'index de ligne (NoLigne) doit être supérieur à 0


Sub Conversion()
    Dim MyRecord As Record, NoLigne As Long, FF As Integer
    Dim sValueLettres As String
    Dim CaractèreDeFinDeLigne As String * 2
   
    FF = FreeFile
   
    Open "C:\temp\Montant.txt" For Random As #FF Len = Len(MyRecord)
   
    Do While Not EOF(FF)
        NoLigne = NoLigne + 1       'doit être > 0
        Get #FF, NoLigne, MyRecord
       
        ' traitement
        If MyRecord.VS03 <> "" Then
        MsgBox MyRecord.VS01 & vbCrLf & MyRecord.VS02 & vbCrLf & MyRecord.VS03
'         txt_Nb_Text = MyRecord.VS03
'         Call ChiffresLettres_F((CDbl(txt_Nb_Text)), sValueLettres)
'
'    Put #FF, NoLigne, MyRecord
       
        End If
    Loop
    Close #FF
 
End Sub


MPi
samedi 21 juillet 2007 à 23:03:04 | Re : Mettre à jour une zone dans un fichier texte

Marianne108

Merci Bcp pour ton aide, ça avance bien mais désolé de t'ennuyer un peu plus car je récupére bien des données mais elle sont décalées ainsi
mon fichier et comme suit  ( séparateur tabulation pour les zones et entrée pour les enregistrements) 
VS01    VS02       VS03
4             E          1235,12
15          D          2580,56

lorque j'exécute le source je récupère dans
MyRecord.VS01="VS01VS02"
MyRecord.VS02="VS03 4E"
MyRecord.VS03="1235,12 1"
Alors que je veux récupérer
Enregistrement 1
MyRecord.VS01="VS01"
MyRecord.VS02="VS02"
MyRecord.VS03="VS03"
Enregistrement 2
MyRecord.VS01="4"
MyRecord.VS02="E"
MyRecord.VS03="1235,12"
Enregistrement 3
MyRecord.VS01="15"
MyRecord.VS02="D"
MyRecord.VS03="2580,56"


MM
dimanche 22 juillet 2007 à 01:52:31 | Re : Mettre à jour une zone dans un fichier texte

MPi

La méthode Random pour la lecture de fichier est intéressante lorsqu'on a des données ayant des espacements fixes. C'est à ça que sert le Type. Dans ton cas, le Type était de 3 données de 10 caractères de long.

Par contre, le fichier que tu essaies de lire ne doit pas avoir 3 données de 10 caractères. Ce sont simplement 3 variables de longueur non définie. Il serait préférable d'utiliser alors

Open "MonFichier" For Input as #ff
Ensuite utiliser Line Input pour lire une ligne
Puis utiliser Split sur cette ligne avec vbTab comme délimiteur
Le tableau généré par Split contiendra alors les 3 (ou plus) valeurs de chaque ligne

Est-ce que tu comprends mon charabia ?

MPi
dimanche 22 juillet 2007 à 11:33:01 | Re : Mettre à jour une zone dans un fichier texte

Marianne108

Bonjour
Pour ton information c'est plutôt moi qui suit Charabia et grace à tes informations j'ai pu en tout cas avancer dans la compréhension du traitement de fichier texte et je t'en remercie bcp.
voici ce que j'ai écrit mais je ne sais pas aller plus loin
 FF = FreeFile
        Open "C:\temp\Montant.txt" For Input As #FF
        Do While Not EOF(FF)
            Line Input #FF, textline
            tabul = Split(textline, vbTab) 
quand j'exécute ce source j'ai dans texteline ce qui suit
"VS01*VS02*vs03*VS04"      *=correspond ici à la tabulation
"4*E*1235,12*Durand"
"15*D*2580,56*Dupont"
l'idéee est de savoir comment récupérer la position de VS03 entre deux tabulations afin de la traiter.
 
ce que je sais dire mais pas écrire en VB

J'ai volontairement ajouter une zone dans mon fichier VS04 pour pouvoir avoir VS03entre deux tabulations

Et merci bcp 

MM
dimanche 22 juillet 2007 à 15:07:30 | Re : Mettre à jour une zone dans un fichier texte

MPi

L'ajout de VS04 n'est pas nécessaire.
Lorsque tu écris
tabul = Split(textline, vbTab)  ' en espérant que tabul est un tableau ... tabul()
celui-ci contiendra
tabul(0) => VS01
tabul(1) => VS02
tabul(2) => VS03
............... tant qu'il y aura des tabulations sur cette ligne

Tu peux donc mettre une condition sur tabul(2)
If CDbl(tabul(2)) > 1500 then ....
ou
If tabul(2) <> "" then

Bonne chance

MPi
dimanche 22 juillet 2007 à 15:46:24 | Re : Mettre à jour une zone dans un fichier texte

Marianne108

Réponse acceptée !

merci bcp le problème est régle, t'es un crack
finalement je lis le fichier Montant.txt et j'écris dans un autre fichier Montant1.txt

dans montant.txt j'avais
VS01  VS02  VS03
4           E       1235,12
15         D      2580,56

je retrouve dans montant1.txt
VS01   VS02                                                   VS03
4           E                           mille deux cents trente cinq  Euros et douze  Centimes
15         D                          deux mille  cinq cents quatre-vingt   Euros et cinquante six  Centimes

comme suit :

Sub Conversion()
 
Dim textline
Dim Zone As String
Dim sValueLettre As String

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Dim oFSO
    Set oFSO = CreateObject("Scripting.FileSystemObject")
Dim oTxtFile
    Set oTxtFile = oFSO.OpenTextFile("C:\temp\Montant1.txt", ForWriting, True)
   
FF = FreeFile


   Open "C:\temp\Montant.txt" For Input As #FF
   
    Do While Not EOF(FF)
             Line Input #FF, textline
            
            tabul = Split(textline, vbTab)
          
       MyPos = InStr(1, tabul(2), "VS")
       
       
       If MyPos <> 1 Then
        txt_Nb_Text = tabul(2)

 ' traitement chiffres en lettres
       Call ChiffresLettres_F((CDbl(txt_Nb_Text)), sValueLettre)
       
      tabul(2) = sValueLettre
      End If
     
        Zone = tabul(0) & vbTab & tabul(1) & vbTab & tabul(2)
        oTxtFile.WriteLine Zone
 Loop

Close #FF

  
End Sub



Cette discussion est classée dans : fichier, texte, données, colonne, montant


Répondre à ce message

Sujets en rapport avec ce message

Import de fichier texte vers Excel [ par nico_fip1 ] Bonjour, Une application en C++ me génère un fichier texte avec séparateur (actuellement ';' mais ça peut être changé). Je souhaite qu'une macro d'un Récupérer données d'une textox et transmettre dans un fichier texte [ par Xini28 ] Salut à tous,J'essaie de récupérer les données que je rentre dans une textbox et le transmettre dans un fichier texte normal. Juste en entrant les don Afficher les données d'un fichier texte [ par davidguillon ] B'jour!Je débute en VB et ne parviens pas à trouver ce que je souhaite dans l'aide du forum...J'ai un formulaire dans mon application dans lequel l'ut Liér les données d'une application vb avec un fichier excel [ par spootnic22 ] salut les experts,Je veux inserer les données des zones de texte d'une application faite par le visual basic dans un fichier excel par exemple: j'ai u Diagramme rosace [ par plume_12 ] Bonjour,Je dois faire un petit programme avec Visual Basic, mais étant débutante, j'ai vraiment du mal !Mon travail consiste à récupérer des données e Lire un fichier texte et récupérer son contenu dans excel [ par olivier857 ] Bonjour à tous,Je me pose 2 questions :1ère :Comment lire un Fichier Texte ligne par ligne et le mettre dans une Feuille Excel ?2ème :Comment gérer un Recherche d'une valeur dans un fichier texte [ par gramlinz60 ] Bonsoir à tous,J'ai un petit problème :Je possède un fichier Excel avec 60000 lignes, un fichier texte avec 200 000 lignes.je souhaiterais, pôur chaqu extraction données d'un fichier texte [ par TM20 ] Bonjour à tous et toutes,voila, je sollicite l'aide de toute personne qui veut bien sur m'aider,je cherche à lire un fichier csv sans excel, c'est à d Ecrire dans un fichier texte sur une colonne précise [ par nico2nico65 ] Bonjour,   Je dois réaliser un fichier texte à partir d'informations saisies dans Excel. Ce fichier texte me permet ensuite d'importer les factures da


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,390 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales