1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
Dim sDataTemp As String
Dim sSubDataTemp As String
Dim sDataTab() As String
Dim lNbLines As Long
Dim lNbFic As Integer
Dim iIndDep As Integer
Dim i As Integer
Dim lTailleMax As Long
Dim lPosFinSousFichier As Long
Dim lPosDebSousFichier As Long
Dim ifile As Integer
Dim lTailleSubFile As Long
Dim lTailleSubTemp As Long
Dim lTailleFicOrig As Long
Dim lTailleMaxOrNbFic As Long
Dim sTailleOuNb As String
Dim sNomObjet As String
Dim NBOctetMax As Long
Dim f As Integer
'1/lecture du fichier d'origine
' trappe les erreurs
On Error GoTo Err_ReadFileToBuffer
' Ouverture du fichier en Binaire
f = FreeFile
Open sFile For Binary Access Read As #f
' préallocation d'un buffer à la taille du fichier
sDataTemp = Space$(LOF(f))
' lecture complète du fichier
'je commence à lire à partir de l'octet iIndDep (calculé avant) pour ne recupérer que les
'infos utiles du fichier
Get #f, iIndDep, sDataTemp
Close #f
'2/comptage du nombre d'enregistrement dans le fichier d'origine
sDataTab() = Split(sDataTemp, vbCrLf)
lNbLines = UBound(sDataTab()) + IIf(LBound(sDataTab()) = 0, 1, 0)
'3/ calcul de la taille d'un sous fichier (en nombre d'enregistrement) et du nombre d'octet à
'inserer dans un sous fichier
'lnbfic est le nombre de fichier à créer passé en parametre
lTailleMax = lNbLines \ lNbFic 'division entière
If (lTailleMax * lNbFic) < lNbLines Then
lTailleMax = lTailleMax + 1
End If
'pour obtenir le nombre d'octet max, on multiplie ce nombre par 15 car il y a 15 caractère
'max par ligne
NBOctetMax = lTailleMax * 15
'3/ boucle de création des sous fichier
lPosFinSousFichier = 0
For i = 1 To lNbFic
'j'ajoute 2 caractère à la position de fin pour obtenir la position de debut du fichier
'suivant, pour eviter de récupérer une ligne vide (le caractère VbCrLf prend 2 caractères :
'saut de ligne et retour chariot
lPosDebSousFichier = lPosFinSousFichier + 2
'je recherche la dernière occurence de fin de ligne de mon sous fichier
'pour cela je commence à chercher à partir du debut de la dernière ligne de mon sous fichier, grace à la fonction INSTRB :
'j'ajoute à la position du premier enregistrement de mon nouveau sous
'fichier dans le fichier origine le nombre d'octet max par fichier (moins 15
'pour etre sur que le fichier n'ai pas plus de NBOctetMax octets) et je recherche
'l'occurence de fin de ligne suivante
lPosFinSousFichier = InStrB((lPosDebSousFichier + NBOctetMax - 15), sDataTemp, vbCrLf, 0)
'je recupere les données de mon sous fichier
lTailleFicOrig = Len(sDataTemp)
lTailleSubFile = lPosFinSousFichier - lPosDebSousFichier
sSubDataTemp = Space$(lTailleSubFile)
sSubDataTemp = Mid(sDataTemp, lPosDebSousFichier, lTailleSubFile)
lTailleSubTemp = Len(sSubDataTemp)
'ecriture du sous fichier
' Ouverture du fichier en Binaire
f = FreeFile
Open sSubFile & "_" & i For Binary Access Write As #f
' ecriture complète du fichier
Put #f, , sSubDataTemp
Close #f
Next i |
Partager