Bonjour,
Je rencontre le problème suivant avec l'une de mes routines visant à stocker un fichier en mémoire pour effectuer diverses opérations dessus.
Le fichier en question pèse environ 500Mo avec quelques 12 000 lignes.
La routine s'effectue sans problèmes, le fichier est stocké dans une variable puis découpé par ligne dans un tableau. j'arrive à afficher les éléments de ce tableau.
Seulement, au moment de quitter la routine (avant (ou après?) le end sub) j'obtiens plusieurs fois le message "out of memory".
voici la fonction pour charger le fichier dans une variable "string":
J'utilise ensuite cette fonction dans le code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Function ReadFileToBuffer(ByVal szFileName As String, _ ByRef errCode As Integer, _ ByRef errString As String) As String Dim f As Integer Dim buffer As String ' trappe les erreurs On Error GoTo ReadFileToBuffer_ERR ' Ouverture du fichier en 'Binary' f = FreeFile Open szFileName For Binary As #f ' ' préallocation d'un buffer à la taille du fichier buffer = Space$(LOF(f)) ' ' lecture complète du fichier Get #f, , buffer Close #f ReadFileToBuffer = buffer ReadFileToBuffer_END: Exit Function ReadFileToBuffer_ERR: ' Gestion d'erreur ReadFileToBuffer = "" errCode = Err.number errString = Err.Description Resume ReadFileToBuffer_END End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Sub LoadResultFile() 'declaration Dim fileName As String Dim Results() As String, tempResult As String Dim errCode As Integer, errString As String 'get filename and store it fileName = pickUpFilename("Results", "*.dat;*.txt") 'simple fonction pour récupérer le chemin complet du fichier tempResult = ReadFileToBuffer(fileName, errCode, errString) If errCode = 0 Then Results = Split(tempResult, vbCrLf) MsgBox Results(0) 'cette commande passe sans soucis!!! MsgBox Ubound(Results) 'renvoie bien 12000 Else MsgBox "Problem in reading file!" & vbCrLf & "error " & errCode & ": " & errString, vbCritical End If End Sub
Avez-vous une idée concernant les causes de l'erreur (à priori, il n'y a pas de soucis pour charger l'ensemble en mémoire, mais plutôt au moment de la libération de mémoire faites par le compilo)?
Si oui, savez-vous comment y remédier?
Merci de m'avoir lu.
Partager