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

Archive Visual Basic & VB.NET

 > 

Archives Visual Basic

 > 

J'AI BESOIN D'AIDE !!!! :)

 > 

Lire des mots d'un TXT spécial


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

Lire des mots d'un TXT spécial

jeudi 23 décembre 2004 à 20:56:25 | Lire des mots d'un TXT spécial

danielgrd

Bonjour,


J'ai reçu ce code il y a plusieurs mois sur VBFrance... Maintenant que je suis près a l'utiliser je me rend compte que je n'arrive pas a bien le comprendre...

Ce code sert à afficher des mots contenues dans un fichier txt (c:\b.txt) et les transfèrer dans un label séparément...

Le fichier c:\b.txt est spécial... Chaque ligne contient plusieurs mots séparés par un signe(#).
Exemple :
mot1#mot2#mot3#mot4#mot5#""
mot6#mot7#mot8#mot9#mot10#""
etc...

Mes questions sont :

1 - Il y a t-il plus simple que ce code?

2 - Si non, comment je fais pour afficher le 3e mot de la 1e ligne? Et le 4e de la 1e ligne etc...? Ainsi que le 1er mot de la 2e ligne et le 2e de la 2e ligne? etc...
Parceque moi présentement avec ce code je ne peux qu'afficher les deux premiers mots de la 1e ligne... Pour les autres j'ai aucune idée de comment je pourrais les afficher...

3 - Pourquoi faut-il mettre un "" à la fin de chaque ligne? Est-ce obligatoire?


MERCI D'AVANCE!


----------------------------------------------------------------------------------
Dim Texte As String
Dim Numfile As Integer
Dim FirstHeader As Long
Dim NextHeader As Long

'Ouvre le fichier et le charge en mémoire vive
Numfile = FreeFile

Open "c:\b.txt" For Input As Numfile
Texte = Input(LOF(Numfile), Numfile)
Close Numfile

'Maintenant relevons les 2 premiers
'champs de chaque ligne

FirstHeader = InStr(1, Texte, "#")
'1er champs
LABEL1.Caption = Left$(Texte, FirstHeader - 1)
FirstHeader = FirstHeader + Len(",")

NextHeader = InStr(FirstHeader, Texte, "#")
'2eme champs
LABEL2.Caption = _
Mid$(Texte, FirstHeader, NextHeader - FirstHeader)

End Sub
--------------------------------------------------------------------------------------
jeudi 23 décembre 2004 à 21:02:45 | Re : Lire des mots d'un TXT spécial

danielgrd

Oups, j'ai glissé une petite erreur dans le code... À la sixième ligne en partant de la fin vous voyez une virgule entre parenthèse... Et bien il s'agirait plutot de ("#") et non pas de (",")

J'attend vos réponses!!!
vendredi 24 décembre 2004 à 00:22:59 | Re : Lire des mots d'un TXT spécial

crenaud76

Si je lit bien le code, seul les 2er mot de chaque ligne t'intéresse ?? On peut fair eun peu plus simple effectivement (et en plus içi il te manque une boucle pour tourner sur toutes les lignes du fichier.


Dim Texte As String, Numfile As Integer,Mots() as string,Lignes() as string,i as long

Numfile = FreeFile
Open "c:\b.txt" For Input As Numfile
Texte = Input(LOF(Numfile), Numfile)
Close Numfile
Lignes = split(text,vbcrlf) 'Eclate le fichier en ligne dans un tableau
For i = 0 to ubound(lignes) ' De la 1ere ligne à la dernière
mots = split(lignes(i),"#") ' Eclate la ligne en mots dans un tab
Msgbox Mots(0) ' 1er mot car tableau d'indice 0
Msgbox Motss(1) ' 2eme mot car tableau d'indice 0
Next

En remplacant bien sur les 2 appels à MsgBox par ce que tu veux faire des mots N°1 et N°2

Christophe R.
vendredi 24 décembre 2004 à 01:32:44 | Re : Lire des mots d'un TXT spécial

danielgrd

Merci de ta réponse...

Premièrement je ne veux pas que lire les deux premiers mots mais plutot tout les mots des toutes les lignes...

Je veux que chacuns des mots soient égalent au caption d'un label (un label par mot)...

J'ai donc essayé ta source et je me suis permis d'enlever le 2e 's' de l'avant dernière ligne ... Mais le code ne fonctionne pas plus...

Si je laisse les MsgBox rien ne se passe... Et si je les changent pour faire afficher dans un label cela ne fonctionne pas plus... Rien ne se passe!

J'espère que tu me répondra!



Merci d'avance
vendredi 24 décembre 2004 à 03:13:54 | Re : Lire des mots d'un TXT spécial

Gobillot

si j'ai bien compris tu veux un mot par Label. Le mieux c'est de faire un groupe de contrôle, comme je sais pas combien il y aura de mots autant les créer dynamiquement au fur et à mesure, il faut donc que tu gardes le Label1 et que tu mettes sa propriété Index à 1, celui-ci servira de référence pour créer les autres.

Le "" à la fin de chaque Ligne n'est pas nécessaire, mais est-ce qu'il y a une vrai fin de Ligne (chr$(13) & chr$(10) ce qui expliquerait pourquoi le code de crenaud76 ne marchait pas.

La correction Len(",") en Len("#") n'était pas nécessaire, la Longueur d'un caractère sera toujours égale à 1.



Private Sub Command1_Click()
Dim Texte As String
Dim Lg As Long
Dim i As Integer
Dim x As Integer
Dim n As Integer
Dim posx As Integer
Dim posy As Integer
Dim dx As Integer
Dim dy As Integer

' Lecture du Fichier
Open "c:\b.txt" For Binary As #1
Lg = LOF(1): Texte = Space$(Lg)
Get #1, , Texte
Close #1

' position de départ
posx = Label1(1).Left
posy = Label1(1).Top
' définir l'intervalle entre 2 Labels
dx = 100: dy = 100

For i = 1 To Lg
x = InStr(i, Texte, "#")
If x > 0 Then
n = n + 1
If n > 1 Then
'création d'un nouveau Label
Load Label1(n)
Label1(n).Left = posx
Label1(n).Top = posy
Label1(n).Visible = True
End If
posx = posx + Label1(1).Width + dx
' changement de Ligne tous les 5 Labels
If n Mod 5 = 0 Then
posx = Label1(1).Left
posy = posy + Label1(1).Height + dy
End If
Label1(n) = Mid$(Texte, i, x - i)
If Mid$(Texte, x + 1, 2) = Chr$(34) & Chr$(34) Then x = x + 2
If Mid$(Texte, x + 1, 2) = vbCrLf Then x = x + 2
i = x
End If
Next

End Sub


Daniel
vendredi 24 décembre 2004 à 09:20:17 | Re : Lire des mots d'un TXT spécial

crenaud76

correction :

Dim Texte As String, Numfile As Integer,Mots() as string,Lignes() as string,i as long

Numfile = FreeFile
Open "c:\b.txt" For Input As Numfile
Texte = Input(LOF(Numfile), Numfile)
Close Numfile
Lignes = split(texte,vbcrlf) 'Eclate le fichier en ligne dans un tableau
For i = 0 to ubound(lignes) ' De la 1ere ligne à la dernière
mots = split(lignes(i),"#") ' Eclate la ligne en mots dans un tab
label1.caption = Mots(0) ' 1er mot car tableau d'indice 0
label2.caption = Mots(1) ' 2eme mot car tableau d'indice 0
label3.caption = Mots(2) ' 3eme mot car tableau d'indice 0
label4.caption = Mots(3) ' 4eme mot car tableau d'indice 0
' etc ... etc ...
Next


J'ai corrigé le 's' en trop et ajouté un 'e' à 'Texte' dans la ligne
"Lignes = split(texte,vbcrlf)"
Au passage, pour éviter ce genre de désagrément, je te conseille de rajouter "Option Explicit" tout en haut de tous tes modules, cela évitera qu'une erreur de frappe ne bogue ton code ...

Christophe R.
vendredi 24 décembre 2004 à 22:12:04 | Re : Lire des mots d'un TXT spécial

danielgrd

Bonjour,

Merci de vos réponses crenaud76 et Gobillot!

Gobillot :
Je n'ai pas testé ton code Gobillot... Il semble excellent mais le problème c'est que tous mes label portent des nom différends (lblNom,lblCond,lblNum,lblYe,etc...) et je tiens a garder ces noms (J'en ai BeAuCouP!) Il y a-t-il un autre moyen me permettant de garder mes noms de labels???????????


crenaud76 :
J'ai testé ton code... Étrangement il ne fonctionne toujours pas. Maintenant je ne suis capable d'ouvrir le programme...
Cette erreur survient :
Erreur d'exécution 9
Indice en dehors de la plage
Et là il surligne en jaune :
lblNum.Caption = Mots(0) ' 1er mot car tableau d'indice 0


J'attend vos réponses....!!! :0)



Merci d'avance



vendredi 24 décembre 2004 à 23:41:04 | Re : Lire des mots d'un TXT spécial

Gobillot

Réponse acceptée !
je comprends pas pourquoi ça te fait une erreur sur Mots(0) ???
j'ai modifier ma méthode, mais comme elle est basée sur le même principe que crenaud76, il faudrait trouver pourquoi cette erreur sur Mot(0)
pour l'utiliser:
lblNom = Table (1,1) '1ére Ligne, 1er Mot
lblCond = Table(2,3) '2éme Ligne, 3éme Mot
lblNum = Table(4,5) '4éme Ligne, 5éme Mot



Option Explicit

Option Base 0

Dim Table() As String

Private Sub Form_Load()
Dim Texte As String
Dim Lignes() As String
Dim Mots() As String
Dim i As Integer
Dim j As Integer
Dim x As Integer
Dim y As Integer

Open "c:\b.txt" For Binary As #1
Texte = Space$(LOF(1))
Get #1, , Texte
Close #1
Lignes = Split(Texte, vbCrLf)
x = UBound(Lignes): y = 1
ReDim Table(x, y)
For i = 0 To x - 1
Mots = Split(Lignes(i), "#")
If UBound(Mots) > y Then
y = UBound(Mots)
ReDim Preserve Table(x, y)
End If
For j = 0 To UBound(Mots) - 1
Table(i + 1, j + 1) = Mots(j)
Next
Next
End Sub


Daniel
samedi 25 décembre 2004 à 22:25:44 | Re : Lire des mots d'un TXT spécial

crenaud76

T'aurais pas un "Option Base 1" en haut de ton module ??
Si oui, il faut incrémenter d'un les indices des mots. Mots(0) deviendra Mots(1) pour le 1er mot, Mots(1) deviendra Mots(2) pour le 2eme mot, etc ....
Ou alors tu laisses les indices tel quel et tu supprimes le "Option Base 1" (ou tu mets "Option Base 0", mais c'est la valeur par défaut, donc ...)



Christophe R.
lundi 27 décembre 2004 à 16:58:48 | Re : Lire des mots d'un TXT spécial

espadon2

Réponse acceptée !
Salut a tous ...voila une solution

les "" a la fin du ficheir ne serve a rien ici


Attention , il faut rajouter une reference au projet :"Microsoft Scripting Runtime"

Function GiveMots(aPathFile As String, aLine As Integer, aPos As Integer) As String
Dim fso As New FileSystemObject
Dim myTxt As TextStream ' le fichier text contenant les lignes de mots
Dim myLine As String ' la ligne
Dim myTabLine() As String ' le tableau resulat de la decoupe de la ligne


' ouverture du fichier texte passé en parametre
Set myTxt = fso.OpenTextFile(aPathFile, ForReading)

' on boucle jusque l'on arrive a la hauteur de la ligne
' on s 'arrete a la ligne precedente , cela explique aline - 1
For i = 1 To aLine - 1
' si on est arrivé a a la fin du fichier
If myTxt.AtEndOfStream = True Then
' il n' a pas autant de lignes ....
GiveMots = "!#ERROR#!"
Exit For

Else
myTxt.SkipLine
End If
Next i

If GiveMots = "" Then
' a ce niveau on est positionné sur la ligne recherher "aLine"
' On la recupere dans la variable myLine
myLine = myTxt.ReadLine

' on la decoupe en fonction #
myTabLine = Split(myLine, "#")

'A ce niveau on a recuperé un tableau contenant tous les mots de la ligne recherchées

' si la position existe ... aPos - 1 car le tableau commence a
' l 'indice zero ... Ubound = plus grand indice du tableau
If UBound(myTabLine) > aPos - 1 Then
' return du mots a la position demande ..
GiveMots = myTabLine(aPos - 1)
Else
' sinon il n' y as pas de mots a cette position
GiveMots = "!#ERROR#!"
End If
End If
End Function



Exemple utilsation :
Dim monMots As String
monMots = GiveMots(App.Path & "\b.txt",2, 4)
MsgBox monMots


=> Affichage de " mot10 "

Si ca peut aider des personnes ... salut bonnes fetes ...

espadon

1 2

Cette discussion est classée dans : ligne, texte, txt, numfile, firstheader


Répondre à ce message

Sujets en rapport avec ce message

supprimer UNE ligne dans un fichier txt [ par vince ] mon fichier texte contient par exemple 3 lignes de texte. Je souhaite supprimer la 1ere et en rajouter une à la fin (comme une mémoire déroulante).Mer Probleme avec les aut de ligne et retout eu chariot [ par RMOINAS ] sltAlors voilà mon probleme.bui = Inet1.OpenURL("http://r.moinas.free.fr/news2.txt")Open "c:/news3.txt" For Output As #1Write #1, buiClose #1Open "c:/ retour à la ligne dans un .txt [ par mauris ] Salut à tous,voilà j'ai un bouton pour enregistrer ma textbox dans un .txt :Private Sub Command7_Click()Open App.Path & "\" & Text22 & ".txt" For Outp pb de lecteur ligne par ligne trop rapide [ par Antony ] bonjour tout le monde !voilà j'ai un fichier texte.txt que j'ouvre ligne par ligne et que je met dans une list box comme ceci :Open "c:\Program Files\ fin d un fichier texte ds un .txt [ par krousty ] bonjour , je voulais savoir si il était normal que lorsque j envoie une chaine de caractere dans un fichier .txt il me rejaouté toujours 2 ligne a la fin de ligne dans un fichier texte [ par morcelet ] Bonjour a tous. voila j'utilise ce system pour lire un fichier texte :         FirstHeader = 0         FirstHeader = FirstHeader + 7 modifier fichier texte [ par maxsecurite2 ] Bonjour,J'aimerais savoir comment faire pour faire une petite gymnastique avec un fichier txt je vous explique ; j'ai un fichier (config.txt) qui cont PB Checkedlistbox et texte d'item trop long [ par etiNmus ] bonjour à tous, sous VB2008, Quelqu'un connaîtrait-il le moyen de forcer un retour à la ligne (ou un affichage "multiline") d'un item dans un checked supprimer seulement le texte d'une ligne [ par Robikatchou ] Bonjour, Je cherche à effacer le contenu d'une ligne déterminée comme ci dessous, le problème c'est qu'avec ce code, ça efface le contenu texte de la textbox vers listview en VB6 [ par FOUNI ] Bonjour les pros Voilà ma question je récupère un texte situé dans le presse papier windows et je le place dans un textbox pour info si l on place


Nos sponsors


Sondage...

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,281 sec (3)

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