Accueil > Forum > > > > Mettre à jour une zone dans un fichier texte
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
|
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
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
ACCES ODBCACCES ODBC par yannickcottin
Cliquez pour lire la suite par yannickcottin
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|