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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
LE TROLL
Salut, peut être que ça marche dans un RTF, sans doute... -----------
"Shewy80" a écrit dans le message de news: d6em6h$rvc$
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
Salut, peut être que ça marche dans un RTF, sans doute...
-----------
"Shewy80" <guillaume.baca@neuf.fr> a écrit dans le message
de news: d6em6h$rvc$1@aphrodite.grec.isp.9tel.net...
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
Salut, peut être que ça marche dans un RTF, sans doute... -----------
"Shewy80" a écrit dans le message de news: d6em6h$rvc$
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
Fred
Dans son message d6em6h$rvc$ Shewy80 nous dit :
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
Bonjour, S'il ne s'agit que d'affichage, pourquoi pas le faire dans un PictureBox en utilisant Print, CurrentX, CurrentY ? Sinon, pour réaliser des alignements dans un contrôle TextBox, je n'ai pas essayé avec des tabulations mais en utilisant une police à espacement fixe et des espaces. Tu complètes alors chaque chaîne par le nombre d'espaces requis pour obtenir la largeur de la colonne. Sinon, à titre d'information puisque c'est déjà fait, tu peux aussi lire ton fichier texte par ODBC.
-- Fred
Dans son message d6em6h$rvc$1@aphrodite.grec.isp.9tel.net
Shewy80 nous dit :
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
Bonjour,
S'il ne s'agit que d'affichage, pourquoi pas le faire dans un PictureBox en
utilisant Print, CurrentX, CurrentY ?
Sinon, pour réaliser des alignements dans un contrôle TextBox, je n'ai pas
essayé avec des tabulations mais en utilisant une police à espacement fixe
et des espaces. Tu complètes alors chaque chaîne par le nombre d'espaces
requis pour obtenir la largeur de la colonne.
Sinon, à titre d'information puisque c'est déjà fait, tu peux aussi lire ton
fichier texte par ODBC.
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
Bonjour, S'il ne s'agit que d'affichage, pourquoi pas le faire dans un PictureBox en utilisant Print, CurrentX, CurrentY ? Sinon, pour réaliser des alignements dans un contrôle TextBox, je n'ai pas essayé avec des tabulations mais en utilisant une police à espacement fixe et des espaces. Tu complètes alors chaque chaîne par le nombre d'espaces requis pour obtenir la largeur de la colonne. Sinon, à titre d'information puisque c'est déjà fait, tu peux aussi lire ton fichier texte par ODBC.
-- Fred
ng
Salut,
<snip>
Tu peux : * soit utiliser une police à largeur fixe (courrier, lucida console...) et donc calculer très simplement les espaces à mettre pour faire des colonnes propres * soit calculer la largeur du texte via TextWidth() et compléter avec le nombre d'espace qui va bien : mais il risque qd mm d'avoir un léger décalage pas très esthétique * utiliser une listview
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/
Salut,
<snip>
Tu peux :
* soit utiliser une police à largeur fixe (courrier, lucida console...) et
donc calculer très simplement les espaces à mettre pour faire des colonnes
propres
* soit calculer la largeur du texte via TextWidth() et compléter avec le
nombre d'espace qui va bien : mais il risque qd mm d'avoir un léger
décalage pas très esthétique
* utiliser une listview
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Tu peux : * soit utiliser une police à largeur fixe (courrier, lucida console...) et donc calculer très simplement les espaces à mettre pour faire des colonnes propres * soit calculer la largeur du texte via TextWidth() et compléter avec le nombre d'espace qui va bien : mais il risque qd mm d'avoir un léger décalage pas très esthétique * utiliser une listview
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/