OVH Cloud OVH Cloud

besoin d'un conseil, un avis

1 réponse
Avatar
Shewy80
Bonjour à tous.
Je suis en train de lire un fichier texte, je prend ensuite chacune des
lignes.
Ces lignes je les découpe en fonction du sépérateur ( ; )
puis je mets tout ça dans un textBox (multiligne=true)

Pour dire bien voir les séparations, j'ajoute un, deux, ou trois tabulation
(chr(9) )

Mais voilà le problème. Malgré la détection de long de chaine, les
tabulations ne tiennent pas compte des lignes sup.
Donc au final il existe des décallage dans mon textbox.

Comment je pourais faire pour afficher mon fichier (contient donc 10 champs,
soit 10colonnes) proprement.

Au début, j'avais utiliser un MsFlexGrid, mais voilà cet outil ne fonctionne
pas à l'IUT.
En effet les sécurités installés sur site, empeche à VB de s'éexuter avec
d'autres outils.

Je suis donc limité aux outils standard pour faire ça.

Si vous avez une idée, ou une aide MERCI !!!


Voici les lignes qui peuvent être intéressante de mon code source pour vous
aider.


CREATION DU FICHIER PERMETTANT LE STOCKAGE DES VALEURS
----------------------------------------------------------------------------
-------------------------------------------
Sub rest_DSmaster_Click()

Call fichier.ChemFichier("DSmaster.ini")
->> cette fonction fais un path correct avec app.path et le nom du fichier.
->> Elle détect aussi sa présence, le crée sinon
->> Elle détect aussi si on se trouve à la racine pour ajouter ou non un '\'
->> Renvoi au final ChemFich qui est le chemin + nom du fichier depuis C:\

Dim nfic
nfic = FreeFile(1) '(mettre 1 si on veut permettre l'ouverture de fichier
par une autre app en même temps)
Open ChemFich For Output As nfic 'ouverture en écriture écrasement total
Print #nfic, "Pseudo;Niveau;Nb de d'essai max;Essai atteint;Nb.billes à
dispo;Nb.de trou;Durée du jeu;Date;Heure;Résultat;"
Close #nfic

End Sub


ECRITURE DANS LE FICHIER
----------------------------------------------------------------------------
---------------------------------------------------------------------
temp = Pseudo & ";" & niveau & ";" & nessai & ";" & essai & ";" & nbilles &
";" & nboites & ";" & DuréePartie & ";" & Date$ & ";" & Time$ & ";" &
resultat & ";"
Open ChemFich For Append As #nfic
Print #nfic, temp
Close #nfic
End If

End If






LECTURE DU FICHIER ET INSERT DANS TEXT BOX
----------------------------------------------------------------------------
----------------------------------------------------------------------------
---------
Sub chargeTextBox()
Dim nfic As String 'canal d'ouverture du fichier
nfic = FreeFile(1) 'attribution d'un canal libre
Dim cptlig1 As Integer 'est le Nb. de champs de la premiere ligne
Dim cpt As Integer 'compteur (Nb de champs de colza)
Dim temp As String 'valeur lue dans le fichier
Dim tableau() As String 'tableau contenant les valeurs découpés

'Calcul le Nombre de Col avec 1ere ligne du fichier
Open ChemFich For Input As nfic
On Error GoTo erreur
Line Input #nfic, temp
cpt = fichier.DecouperChaine(temp, ";", tableau)
cptlig1 = cpt
Close #nfic

'Lecture du fichier
Open ChemFich For Input As nfic
Do While Not EOF(nfic)
Line Input #nfic, temp
'on recalcul le nb de champs (dans le cas où le fichier aurait des
trou)
cpt = fichier.DecouperChaine(temp, ";", tableau)

If Not (cptlig1 = cpt) Then
'cas où le nb de champs d'une ligne n n'est pas = à l'entete
de colones
'on arrête l'affichage
GoTo erreur
End If

Dim k As Integer 'Pointeur de case sur le tableau strtab
Dim texte As String
Dim i As Integer

For k = 1 To cpt
If k = cptlig1 Then
texte = texte & vbCrLf
Else
If Len(tableau(k)) < 20 Then
If Len(tableau(k)) < 2 Then
texte = texte & tableau(k) & Chr(9) & Chr(9) &
Chr(9)
Else
texte = texte & tableau(k) & Chr(9) & Chr(9)
End If
Else
texte = texte & tableau(k) & Chr(9)
End If
'selon la longeur on ajoute 1,2 ou plus de tabulation

End If
Next
i = i + 1
Loop
Close #nfic


Text1.Text = texte





DECOUPER LE FICHIER EN CHAINE SEPARE
EN FONCTION DU CARACT DE SEPARATION
(C'est pas de moi, j'aurais peut etre faire plus simple: Code présent sur
Vbfrance adapté à mon projet)
----------------------------------------------------------------------------
----------------------------------------------------------------
Public Function DecouperChaine(StrTmp As String, car1 As String, tabstr() As
String) As Integer

'StrTmp est la chaine complete lue dans le fichier
'car1 est le caractére de séparation
'tabstr() est le tableau qui contiendra les valeurs découpé

Dim i As Integer
Dim cpt As Integer
Dim motprec As String

i = 0
DecouperChaine = 1
ReDim tabstr(1 To 1)
tabstr(1) = StrTmp
If Len(StrTmp) < 1 Then
Exit Function
ElseIf Len(StrTmp) = 1 Then
If StrTmp = car1 Then
DecouperChaine = 2
ReDim tabstr(1 To 2)
tabstr(1) = "": tabstr(2) = ""
End If
Exit Function
End If

cpt = 1
motprec = ""
'InStr Donne la position d'un caractere dans une variable
i = InStr(StrTmp, car1)
While i > 0
If i > 1 Then 'motprec sert à ignorer le car1 s'il est précédé par
"?"
If Mid$(StrTmp, i - 1, 1) = "?" Then
motprec = motprec & Left$(StrTmp, i - 2) & car1
StrTmp = Right$(StrTmp, Len(StrTmp) - i)
GoTo IgnorerCar
End If
End If
motprec = motprec & Left$(StrTmp, i - 1)
cpt = cpt + 1
ReDim Preserve tabstr(1 To cpt)
tabstr(cpt - 1) = motprec
motprec = ""
StrTmp = Right$(StrTmp, Len(StrTmp) - i)
IgnorerCar:
i = InStr(StrTmp, car1)
Wend
tabstr(cpt) = motprec & StrTmp
DecouperChaine = cpt
End Function

1 réponse

Avatar
Driss HANIB
utilise éventuellement un listview en mode report

Driss
"Shewy80" a écrit dans le message de
news:d6em7f$rvj$
Bonjour à tous.
Je suis en train de lire un fichier texte, je prend ensuite chacune des
lignes.
Ces lignes je les découpe en fonction du sépérateur ( ; )
puis je mets tout ça dans un textBox (multiligne=true)

Pour dire bien voir les séparations, j'ajoute un, deux, ou trois


tabulation
(chr(9) )

Mais voilà le problème. Malgré la détection de long de chaine, les
tabulations ne tiennent pas compte des lignes sup.
Donc au final il existe des décallage dans mon textbox.

Comment je pourais faire pour afficher mon fichier (contient donc 10


champs,
soit 10colonnes) proprement.

Au début, j'avais utiliser un MsFlexGrid, mais voilà cet outil ne


fonctionne
pas à l'IUT.
En effet les sécurités installés sur site, empeche à VB de s'éexuter avec
d'autres outils.

Je suis donc limité aux outils standard pour faire ça.

Si vous avez une idée, ou une aide MERCI !!!


Voici les lignes qui peuvent être intéressante de mon code source pour


vous
aider.


CREATION DU FICHIER PERMETTANT LE STOCKAGE DES VALEURS
--------------------------------------------------------------------------


--
-------------------------------------------
Sub rest_DSmaster_Click()

Call fichier.ChemFichier("DSmaster.ini")
->> cette fonction fais un path correct avec app.path et le nom du


fichier.
->> Elle détect aussi sa présence, le crée sinon
->> Elle détect aussi si on se trouve à la racine pour ajouter ou non un


''
->> Renvoi au final ChemFich qui est le chemin + nom du fichier depuis C:

Dim nfic
nfic = FreeFile(1) '(mettre 1 si on veut permettre l'ouverture de fichier
par une autre app en même temps)
Open ChemFich For Output As nfic 'ouverture en écriture écrasement total
Print #nfic, "Pseudo;Niveau;Nb de d'essai max;Essai atteint;Nb.billes


à
dispo;Nb.de trou;Durée du jeu;Date;Heure;Résultat;"
Close #nfic

End Sub


ECRITURE DANS LE FICHIER
--------------------------------------------------------------------------


--
---------------------------------------------------------------------
temp = Pseudo & ";" & niveau & ";" & nessai & ";" & essai & ";" & nbilles


&
";" & nboites & ";" & DuréePartie & ";" & Date$ & ";" & Time$ & ";" &
resultat & ";"
Open ChemFich For Append As #nfic
Print #nfic, temp
Close #nfic
End If

End If






LECTURE DU FICHIER ET INSERT DANS TEXT BOX
--------------------------------------------------------------------------


--
--------------------------------------------------------------------------


--
---------
Sub chargeTextBox()
Dim nfic As String 'canal d'ouverture du fichier
nfic = FreeFile(1) 'attribution d'un canal libre
Dim cptlig1 As Integer 'est le Nb. de champs de la premiere ligne
Dim cpt As Integer 'compteur (Nb de champs de colza)
Dim temp As String 'valeur lue dans le fichier
Dim tableau() As String 'tableau contenant les valeurs découpés

'Calcul le Nombre de Col avec 1ere ligne du fichier
Open ChemFich For Input As nfic
On Error GoTo erreur
Line Input #nfic, temp
cpt = fichier.DecouperChaine(temp, ";", tableau)
cptlig1 = cpt
Close #nfic

'Lecture du fichier
Open ChemFich For Input As nfic
Do While Not EOF(nfic)
Line Input #nfic, temp
'on recalcul le nb de champs (dans le cas où le fichier aurait des
trou)
cpt = fichier.DecouperChaine(temp, ";", tableau)

If Not (cptlig1 = cpt) Then
'cas où le nb de champs d'une ligne n n'est pas = à


l'entete
de colones
'on arrête l'affichage
GoTo erreur
End If

Dim k As Integer 'Pointeur de case sur le tableau strtab
Dim texte As String
Dim i As Integer

For k = 1 To cpt
If k = cptlig1 Then
texte = texte & vbCrLf
Else
If Len(tableau(k)) < 20 Then
If Len(tableau(k)) < 2 Then
texte = texte & tableau(k) & Chr(9) & Chr(9) &
Chr(9)
Else
texte = texte & tableau(k) & Chr(9) & Chr(9)
End If
Else
texte = texte & tableau(k) & Chr(9)
End If
'selon la longeur on ajoute 1,2 ou plus de tabulation

End If
Next
i = i + 1
Loop
Close #nfic


Text1.Text = texte





DECOUPER LE FICHIER EN CHAINE SEPARE
EN FONCTION DU CARACT DE SEPARATION
(C'est pas de moi, j'aurais peut etre faire plus simple: Code présent sur
Vbfrance adapté à mon projet)
--------------------------------------------------------------------------


--
----------------------------------------------------------------
Public Function DecouperChaine(StrTmp As String, car1 As String, tabstr()


As
String) As Integer

'StrTmp est la chaine complete lue dans le fichier
'car1 est le caractére de séparation
'tabstr() est le tableau qui contiendra les valeurs découpé

Dim i As Integer
Dim cpt As Integer
Dim motprec As String

i = 0
DecouperChaine = 1
ReDim tabstr(1 To 1)
tabstr(1) = StrTmp
If Len(StrTmp) < 1 Then
Exit Function
ElseIf Len(StrTmp) = 1 Then
If StrTmp = car1 Then
DecouperChaine = 2
ReDim tabstr(1 To 2)
tabstr(1) = "": tabstr(2) = ""
End If
Exit Function
End If

cpt = 1
motprec = ""
'InStr Donne la position d'un caractere dans une variable
i = InStr(StrTmp, car1)
While i > 0
If i > 1 Then 'motprec sert à ignorer le car1 s'il est précédé


par
"?"
If Mid$(StrTmp, i - 1, 1) = "?" Then
motprec = motprec & Left$(StrTmp, i - 2) & car1
StrTmp = Right$(StrTmp, Len(StrTmp) - i)
GoTo IgnorerCar
End If
End If
motprec = motprec & Left$(StrTmp, i - 1)
cpt = cpt + 1
ReDim Preserve tabstr(1 To cpt)
tabstr(cpt - 1) = motprec
motprec = ""
StrTmp = Right$(StrTmp, Len(StrTmp) - i)
IgnorerCar:
i = InStr(StrTmp, car1)
Wend
tabstr(cpt) = motprec & StrTmp
DecouperChaine = cpt
End Function