Extraire une chaine d'un fichier et remplir un tableau

cs_rober Messages postés 86 Date d'inscription vendredi 29 novembre 2002 Statut Membre Dernière intervention 21 septembre 2010 - 18 juil. 2009 à 18:09
VBsearch Messages postés 50 Date d'inscription jeudi 21 juillet 2005 Statut Membre Dernière intervention 22 août 2009 - 19 juil. 2009 à 15:10
Bonjour,
Je voudrais ouvrir un fichier le lire et extraire une chaine comprise entre 2 chaine et la renvoyer dans un tableau qui est sur ma form.
Merci pour votre aide VB6
-------------------------------
|DESIGNATION|AXE INTERMEDIAIRE|
-------------------------------
|NUMPLAN | |
-------------------------------
|FOURNISSEUR| |
-------------------------------

J'ouvre le fichier avec l'instruction:
Open Dir1.Path & "/" & File1.FileName For Binary As #1

La chaine a recuperer est:
AXE INTERMEDIAIRE

le critere de recherche avant est:
3 26 DESIGNATION

le critere de recherche apres est:
3 30 -1

je fichier a cette forme:
UGC:2 PART 1376 660 2 1 1 15 2700 2008010 00000835 \
#- VERS 0 0 \
#- HOST \
#- LINK \
#- DBID \
#- REVS 0, \
#- RELL 0, \
#- UOBJ_ID 1231409476 728498638 1849133034 \
#- MACH _Windows \
#- CMNM 00daxe-inter.prt \
#-END_OF_UGC_HEADER
#P_OBJECT 6
@P_object 1 0
0 1 ->
@dep_db 2 0
1 2 ->
@usr_rev 3 0
1 3 [1]
2 3
@name 4 10
3 4 MALLORY
@mod_time 5 0
3 5
@tm_sec 6 1
4 6 29
@tm_min 7 1
4 7 23
@tm_hour 8 1
4 8 12
@tm_mday 9 1
4 9 3
@tm_mon 10 1
4 10 1
@tm_year 11 1
4 11 109
@action 12 1
3 12 1000
@comment 13 10
3 13 Nom-Hôte: '15ST'
@rel_level 14 10
3 14
@rev_string 15 10
3 15
@revnum_std 16 1
1 16 1365
@flag 17 1
1 17 0
@name 18 10
1 18 NULL
@inst_hidden 19 1
1 19 0
@old_name 20 10
1 20 NULL
@user_symbols 21 0
1 21 [5]
2 21 ->
@class 22 1
3 22 1
@access 23 1
3 23 0
@changed 24 1
3 24 0
@copy_of_generic 25 1
3 25 0
@name 26 10
3 26 NUMMAG
@value 27 0
3 27
@type 28 1
4 28 51
@value(s_val) 29 10
4 29
@id 30 1
3 30 -1
@type 31 1
3 31 -1
2 21 ->
3 22 1
3 23 0
3 24 0
3 25 0
3 26 NUMPLAN
3 27
4 28 51
4 29
3 30 -1
3 31 -1
2 21 ->
3 22 1
3 23 0
3 24 0
3 25 0
3 26 DESIGNATION
3 27
4 28 51
4 29 AXE INTERMEDIAIRE
3 30 -1
3 31 -1
2 21 ->
3 22 1
3 23 0
3 24 0
3 25 0
3 26 FOURNISSEUR
3 27
4 28 51
4 29
3 30 -1
3 31 -1
2 21 ->
3 22 1
3 23 0
3 24 0
3 25 0
3 26 ENGNAME
3 27
4 28 51
4 29
Rober

7 réponses

soniabor Messages postés 11 Date d'inscription vendredi 1 mai 2009 Statut Membre Dernière intervention 26 septembre 2009
18 juil. 2009 à 19:00
meme problème mé avec vb.net 2008!
0
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
18 juil. 2009 à 19:08
Salut
On ne va pas te faire ton programme.
Qu'as-tu écrit pour l'instant ?
Faut commencer par le début : Sais-tu comment "lire une ligne", l'une après l'autre ?
--> Charge quelques sources qui parlent de lecture de fichier + l'aide de VB (il y a des exemples avec la commande Open) et tu sauras comment faire.

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
VBsearch Messages postés 50 Date d'inscription jeudi 21 juillet 2005 Statut Membre Dernière intervention 22 août 2009
19 juil. 2009 à 02:32
Salut
Une autre façon de faire est d'utiliser la fonction Split qui te renvoie un tableau contenant toutes les chaînes comprises en les délimiteurs "|" tels que décrit dans ta question.
Tu met le contenu de ton fichier dans une variable que tu affecteras par la suite à un TextBox par exemple ou tu la passeras à la fonction Split. Voici du code qui pourrait te servir tu dois bien sûr l'adapter à ton besoin:
Sub OpenFile(ctlDest As RichTextBox, FileName as String)
Dim fIndex As Integer, ff%
On Error Resume Next
' Ouvre le fichier sélectionné.
ff = FreeFile
Open FileName For Input As #ff
If Err Then
MsgBox "Impossible d'ouvrir le fichier: " + FileName, vbExclamation
Exit Sub
End If
Text1.Text = Input(LOF(ff), ff)
Close #ff
Text1.Refresh
End Sub

Private Sub FillList(lst As ListBox)
Dim tb() As String
tb = Split(Text1.Text, vbNewLine) ' le délimiteur est CR(Retour Chariot)
For I = LBound(tb()) To UBound(tb())
List1.AddItem tb(I)
Next I
End Sub
J'espère avoir pu t'aider.
0
cs_rober Messages postés 86 Date d'inscription vendredi 29 novembre 2002 Statut Membre Dernière intervention 21 septembre 2010
19 juil. 2009 à 11:06
Merci pour ta reponse
J'arrive bien a avoir l'affichage dans le testbox mais je ne vois pas comment lui dire de chercher entre la chaine de recherche avant et la chaine de recherche apres et avoir l'info dans listbox

Rober
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
VBsearch Messages postés 50 Date d'inscription jeudi 21 juillet 2005 Statut Membre Dernière intervention 22 août 2009
19 juil. 2009 à 12:56
Salut
Reformule ta question de façon plus claire.
Ton exemple manque un peu de clarté, sinon que veulent exactement dire les nombres avec :
recherche avant 3 26 et recherche après 3 30-1?
Essaie d'être plus précis et on pourra peut-être t'aider.
0
cs_rober Messages postés 86 Date d'inscription vendredi 29 novembre 2002 Statut Membre Dernière intervention 21 septembre 2010
19 juil. 2009 à 14:01
le fichier est un fichier CAO 3d.
Lorsque je crés mes fichiers 3d il y a des parametres que je renseigne (dans ce cas le parametre est :DESIGNATION et la valeure est:AXE INTERMEDIAIRE)
le probleme est que dans l'ecriture du fichier il y a plusieur fois DESIGNATION.pour pouvoir extraire la bonne valeur de designation je cherche: "3 26 DESIGNATION" et je sais que la valeur se trouve apres "3 30 -1" (c'st toujours la meme syntaxe et position).
Je ne peux pas faire ma recherche apres la valeur "3 26" car tous les parametres se trouvent apres la valeur "3 26".
En realite je pense que je dois chercher la valeur de mon parametre entre la chaine avant :
"3 26 DESIGNATION 3 27 4 28 51 4 29 "
et la chaine apres :"3 30 -1"

voila
pour l'instant je ne prend en compte que le parametre designation mais je voudrais l'etendre a d'autres parametres.

Merci pour votre aide je suis debutant et je comprends que mes questions puissent vous paraitre basiques

Rober
0
VBsearch Messages postés 50 Date d'inscription jeudi 21 juillet 2005 Statut Membre Dernière intervention 22 août 2009
19 juil. 2009 à 15:10
Salut
Dans ce cas, tu pourras effectuer une recherche conditionnelle sur tous les éléments de la ListBox c-à-d :
Dim Ind%,MyStr$,Result$
For ind%=0 to List1.ListCount-1
If MyStr="mets ce que tu veux chercher ici" and
MyStr<>"mets ici ce que tu veux exclure" Then
Result=List1.List(Ind)
End If
Next Ind
et tu mettras le résultat soit dans un tableau(s'il y en a plusieurs) ou le traiter directement dans ton prog
0
Rejoignez-nous