Insertion d'une valeur à une position définie dans fichier TXT

Utilisateur anonyme - 25 nov. 2009 à 10:51
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 25 nov. 2009 à 11:42
Bonjour,

J'ai un petit programme qui interroge ma base SQL Server, afin de récolter des données dans un fichier texte avec un formatage spécial.

Voici le script :

Private Sub Command1_Click()
Const chemin = "C:\Documents and Settings\info09\Bureau\PHARMACIE\Applications Pharmacie\DESTOKRCESS"
Const nom_bdd = "retrocess.mdb"

Dim con_retrocess As Database
Dim rs_retrocess As Recordset
Dim sql As String
Dim nom_fichier As String

Dim fs As FileSystemObject
Dim fs_sortie As TextStream

Dim ligne As String
Dim borne1, borne2 As String
Dim cpt, cpt2 As Integer
Dim j As String
Dim chaine As Integer

borne1 = mini.Text
borne2 = maxi.Text

If borne1 <> "" Then
If borne2 <> "" Then


nom_fichier = "RETROCESS_" & borne1 & "-" & borne2 & ".txt"

Set fs = CreateObject("Scripting.FileSystemObject")

If fs.FileExists(chemin & nom_fichier) Then
fs.DeleteFile (chemin & nom_fichier)
End If


Set fs_sortie = fs.CreateTextFile(chemin & nom_fichier, True)




Set con_retrocess = DBEngine.Workspaces(0).OpenDatabase(chemin & nom_bdd)
sql = "SELECT format(RETRO_VENTE.VEN_DATE_VENTE, 'dd'),format(RETRO_VENTE.VEN_DATE_VENTE, 'mm')," _
& "'RETROXXX' & format(RETRO_VENTE.VEN_DATE_VENTE, 'dd') & " _
& "Format (RETRO_VENTE.VEN_DATE_VENTE,'mm') & " _
& "Format (RETRO_VENTE.VEN_DATE_VENTE,'yy') & " _
& "'010101'+'06112'+'G'+'0'+' 3618 '& " _
& "rtrim(RETRO_LIGNE_FACTURE.LIG_FAC_CODE_HCL) & ' ' & " _
& "format(RETRO_LIGNE_VENTE.LIG_VEN_QUANTITE*100) & '+'" _
& "From RETRO_LIGNE_FACTURE, RETRO_VENTE, RETRO_FACTURE, RETRO_LIGNE_VENTE " _
& "WHERE (((RETRO_LIGNE_VENTE.LIG_VEN_ID) = [RETRO_VENTE].[VEN_ID])) " _
& "AND (((RETRO_VENTE.VEN_ID) = [RETRO_FACTURE].[VEN_ID])) " _
& "AND (((RETRO_FACTURE.FAC_ID) = [RETRO_LIGNE_FACTURE].[FAC_ID]))" _
& "AND format(RETRO_VENTE.VEN_DATE_VENTE, 'yy') & " _
& "Format (RETRO_VENTE.VEN_DATE_VENTE,'mm') & " _
& "Format (RETRO_VENTE.VEN_DATE_VENTE,'dd') " _
& "between '" & borne1 & "' and '" & borne2 & "'"

Set rs_retrocess = con_retrocess.OpenRecordset(sql, 2)
cpt = 1

If rs_retrocess.EOF = False Then
chaine = 90
End If


While rs_retrocess.EOF = False

If cpt < 10 Then
ligne = chaine & rs_retrocess(1) & "0" & cpt & rs_retrocess(2)
Else
ligne = chaine & rs_retrocess(1) & cpt & rs_retrocess(2)
If cpt = 99 Then
chaine = chaine + 1
cpt = 0
End If
End If

fs_sortie.WriteLine (ligne)
cpt = cpt + 1
rs_retrocess.MoveNext
Wend

rs_retrocess.Close
Set rs_retrocess = Nothing

con_retrocess.Close
Set con_retrocess = Nothing

fs_sortie.Close
Set fs_sortie = Nothing
Set fs = Nothing

MsgBox "Extraction effectuée avec succès dans " & chemin

Else
MsgBox "Il manque une borne ! Merci"
End If
Else
MsgBox "Il manque une borne ! Merci"
End If


End Sub

Private Sub Form_Load()
liste_mois.AddItem "Janvier"
liste_mois.AddItem "Février"
liste_mois.AddItem "Mars"
liste_mois.AddItem "Avril"
liste_mois.AddItem "Mai"
liste_mois.AddItem "Juin"
liste_mois.AddItem "Juillet"
liste_mois.AddItem "Août"
liste_mois.AddItem "Septembre"
liste_mois.AddItem "Octobre"
liste_mois.AddItem "Novembre"
liste_mois.AddItem "Décembre"
End Sub


Private Sub liste_mois_Click()

Select Case liste_mois.Text
Case "Janvier"
mini.Text = "090101"
maxi.Text = "090131"
Case "Février"
mini.Text = "090201"
maxi.Text = "090229"
Case "Mars"
mini.Text = "090301"
maxi.Text = "090331"
Case "Avril"
mini.Text = "090401"
maxi.Text = "090430"
Case "Mai"
mini.Text = "090501"
maxi.Text = "090531"
Case "Juin"
mini.Text = "090601"
maxi.Text = "090630"
Case "Juillet"
mini.Text = "090701"
maxi.Text = "090731"
Case "Août"
mini.Text = "090801"
maxi.Text = "090831"
Case "Septembre"
mini.Text = "090901"
maxi.Text = "090930"
Case "Octobre"
mini.Text = "091001"
maxi.Text = "091031"
Case "Novembre"
mini.Text = "091101"
maxi.Text = "091130"
Case Else
mini.Text = "091201"
maxi.Text = "091231"
End Select
End Sub

Ce que je voudrais faire c'est que à partir de la valeur "3618" il y ai forcément 13 caractères au moment de l'insertion de "format(RETRO_LIGNE_VENTE.LIG_VEN_QUANTITE*100) & '+'" _

Concrètement dans mon fichier j'ai 3618 qui ne bouge jamais ensuite j'insère un code qui à un nombre de caractères qui varie mais je veux que l'insertion suivante : RETRO_LIGNE_VENTE.LIG_VEN_QUANTITE*100 soit bien allignée dans mon fichier txt ....

Comment puis je faire ??


Par avance, merci

1 réponse

Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
25 nov. 2009 à 11:42
Bonjour,

Si j'ai bien compris tu veux ajouter des caractères à gauche de ta valeur (des blancs ou des zéros j'imagine).

La fonction suivante devrait te convenir, à adapter selon tes besoins.

Public Function TV_StrZero(Value As Integer, TotalLength As Integer) As String
' Convert an integer to a string of a defined length by left-padding it with zeroes
TV_StrZero = String(TotalLength - Len(CStr(Value)), "0") & CStr(Value)
End Function

Attention, en fait c'est écrit en VBA, je pense que cela doit tourner en VB6, en cas de problème, dis-le moi.

Calade
0
Rejoignez-nous