Problème avec fichier TXT

Résolu
Momone21 Messages postés 23 Date d'inscription dimanche 17 avril 2005 Statut Membre Dernière intervention 4 décembre 2006 - 22 nov. 2006 à 00:57
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 22 nov. 2006 à 15:37
bonjour

j'ai un problème avec mon code, quand je clique sur valider toutes mes
texbox s'enregistre dans un fichier texte mais j'aimerai que mes texbox
s'incrive l'une après l'autre avec comme séparation ";"

comment faire

voici le code de la form:

_________________________________________________________________________

Private Sub CmdValide_Click()

'Ouverture/Créatio du fichier contact

    Open "C:\contacts.txt" For Random As #1 Len = Len(contact)

    'on compte le nombre d'enreg dans le fichier

    EndOfFile = LOF(1) / Len(contact)


    'Ces if sont pour tester si les cases indisponsables sont bien remplises


If TxtNom = "" Then

    MsgBox "Veuillez entrer le nom", 16, "Attention"

    TxtNom.SetFocus

    Else

    If TxtPrenom = "" Then

        MsgBox "Veuillez entrer le prénom", 16, "Attention"

        TxtPrenom.SetFocus

        Else

       

                                   
contact.strNom = TxtNom

                                   
contact.strPrenom = TxtPrenom

                                   
contact.strSex = Combo1

                                   
contact.strTel = TxtPoste

                                   
contact.strMail = TxtUrgence

                                   
contact.strSurnom = TxtDetail

                                   
contact.strService = TxtService

                                   
contact.strVisuel = TxtVisuel

                                   
'On ajoute les infos dans le fichier #1

                                   
Put #1, EndOfFile + 1, contact


                                   
Call ChampVid

                                   
MsgBox "Contact ajouté avec succés!!" ', vbExclamation, "Ajout"

                                   
'on desactive les champs d'encodage again ;)


  

    End If

End If

Close #1

_________________________________________________________________________


avec un module :

Type ContactStruc


    strSex As String * 10


    strNom As String * 20


    strPrenom As String * 20


    strTel As String * 15


    strMail As String * 25


    strService As String * 40


    strSurnom As String * 300


    strVisuel As String * 40



End Type



'La variable de type structure qu'on va utiliser



Global contact As ContactStruc

_________________________________________________________________________


merci d'avance pour votre aide

sylvain

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 nov. 2006 à 15:37
Re
Le vbCrLf va dans sSéparateur8 puisque c'est la dernière donnée de la fiche. (et pas deux fois ; comme tu l'as fait)
Pour les espaces, tu n'as pas le choix, c'est le format du fichier séquentiel qui veut ça.
Je vois deux solutions :
- Triturage avant l'import Excel :
Suffit de remplacer les doubles espaces par des simples dans tout le fichier (soit avec un petit programme en VB soit avec des utilitaires comme "RemplaceVite"
Attention : dans ce cas, le fichier ne sera plus relisible par ton appli VB puisque tu changes la structure des données
Donc, il vaudra mieux en faire une copie et travailler sur la copie.
- Triturage après l'import Excel
Genre : Edition, Remplacer, double-espace par simple-espace et le répéter tant qu'il y a des substitutions.
Tu peux aussi enregistrer cette manip sous une macro que tu lanceras après l'importation.

Mais reflechis à ton projet :
D'après ce que j'ai compris, tu as créé une appli VB pour la saisie et tu veux pouvoir lire les données sous Excel.
Donc, il faut que ton fichier "source" reste intact et ce n'est (à mon avis) pas lui qu'il faut fournir à Excel.
Pourquoi ne pas créer une routine "Export des données pour Excel" dans ton appli ?
Il te suffira de relire chaque fiche de ton fichier "source" et d'écrire les données épurées dans un autre fichier, compatible avec Excel.
Pour info : Si tu déclares une chaine "As String * 10", les fonctions Trim, LTrim ou RTrim ne fonctionneront pas car, de toute façon, la chaine doit avoir 10 caractères. Il faut donc transférer chaque item dans une autre chaine "As String" simple avant de pouvoir travailler sur sa longueur.

Dernière recommandation :
Tout ceci ne fonctionnera pas si le caractère ; apparait dans un de tes champs !
Alors, si tu crées une moulinette, n'oublie de mettre entre " les données des champs qui contiennent le symbole ; et qui fausseraient l'importation sous Excel (décalage de cellules)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 nov. 2006 à 03:24
Salut
En fait, tu as choisi d'utiliser un fichier à acces séquentiel.
C'est pratique car tu peux accéder directement à une fiche en précisant son numéro, mais pas très économique en taille puisque, même si un champ est vide, il représentera quand même une zône d'espaces sur le disque.
Les données sont donc formatées dans le fichier : chaque donnée à une longueur fixe, donc chaque enregistrement aussi.
Si tu veux récupérer tes données avec un séparateur, il faut que tu prépares une moulinette qui lira chaque fiche et enregistrera les champs qui la compose avec ce séparateur. C'est assez facile à faire et le traitement devrait être rapide.
Mais ça veut dire qu'il faudra que tu lances ce 'traducteur' à chaque fois que tu voudras remonter ces données sur Excel (c'est ma boule de cristal qui me l'a dit)

Une autre solution peut consister à modifier la structure de ta fiche (on verra après les problèmes) :
Tous les champs qui composent ta fiche sont de type String
En insérant un champ bidon de 1 caractère entre chaque champ, tu pourras y faire apparaitre ton symbole ';'
Exemple :
Type ContactStruc
    strSex As String * 10
    sSéparateur1 As String * 1
    strNom As String * 20
    sSéparateur2 As String * 1
    strPrenom As String * 20
    sSéparateur3 As String * 1
    strTel As String * 15
    sSéparateur4 As String * 1
    strMail As String * 25
    sSéparateur5 As String * 1
    strService As String * 40
    sSéparateur6 As String * 1
    strSurnom As String * 300
    sSéparateur7 As String * 1
    strVisuel As String * 40
    sSéparateur8 As String * 2
End Type
Il te suffit de vérifier que, à chaque fois, chaque sSéparateur contient bien un ';'
Pour le dernier sSéparateur8, il devra faire 2 octets car, en fin de fiche, je pense que tu voudras insérer un retour à la ligne vbCrLf.

Maintenant, le problème :
Si ton fichier contient déjà des données, tu ne pourras pas le relire avec cette nouvelle structure car on y a ajouté des caractères. Les fiches se trouveraient toutes décalées.
Deux solutions :
- Soit tu crées un petit programme rapide qui relit le fichier avec l'ancien format et qui réécrit un nouveau fichier avec le nouveau format (moulinette rapide à faire)
- Soit tu retires 1 caractère à chaque champ qui précède les séparateurs (2 pour le dernier)
Exemple :
Type ContactStruc
    strSex As String * 9
    sSéparateur1 As String * 1
    strNom As String * 19
    sSéparateur2 As String * 1
. . .
    sSéparateur7 As String * 1
    strVisuel As String * 38
    sSéparateur8 As String * 2
End Type
Bien sûr, l'inconvénient c'est que tes données risquent d'être altérées (puisque tu vas emputer chaque champ)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Momone21 Messages postés 23 Date d'inscription dimanche 17 avril 2005 Statut Membre Dernière intervention 4 décembre 2006
22 nov. 2006 à 09:52
salut Jack

je te remerci sa fonctionne a perfect, mon soucie maintenant ou je doit mettre vbCrLf.

je ne trouve pas son emplacement dans mon code

s'est vrai que je voulais aussi avoir un retour a la ligne

cordialement

sylvain
0
Momone21 Messages postés 23 Date d'inscription dimanche 17 avril 2005 Statut Membre Dernière intervention 4 décembre 2006
22 nov. 2006 à 10:06
Et comment peut-on suprimer les espace vide entre les ";" ";":

exemple:

sylvain                                          
;1254                
;                
;;


j'aimerai qui n'y a plus d'espace entre "sylvain" et ";1254"

cordailement sylvain
0
Rejoignez-nous