[VB] Pb pour Charger un fichier > 32ko dans un String

Pb pour Charger un fichier > 32ko dans un String [VB] - VB/VBA/VBS - Programmation

Marsh Posté le 25-09-2003 à 10:47:52    

Salut,
 
J'ai pas touché à VB depuis au moins 6 ans (VB3)... et mon chef veut un programme en VB :(
 
j'ai un souci, je dois charger un gros fichier dans un String pour ensuite faire quelques chercher/remplacer dedans, puis réécrire le string dans un autre fichier.
 
Voici ce que j'ai :
 
Private Function loadRTF(fichier As String) As String
' chargement du modèle RTF
 
Open fichier For Input As #1
loadRTF = ""
While Not EOF(1)
    ligne = Input(1, #1)
    loadRTF = loadRTF & ligne
Wend
Close #1
 
End Function
 
Private Sub writeRTF(fichier As String, contenu As String)
' écriture du fichier final
 
Open fichier For Output As #2
Print #2, contenu
Close #2
 
End Sub
 
 
Le souci c'est que dès que le fichier original dépasse une certaine taille (approx. 32ko après tests) le programme plante, style boucle infinie.
 
Je soupçonne 2 choses:
- soit le string est plein, l'aide dit qu'on peut faire des chaines dynamiques de 2Go, comment ça se déclare ?
- soit le tampon de lecture est plein, comment on relit un nouveau tampon depuis le fichier dans ce cas ??
 
Merci de l'aide que vous m'apporterez
 
Bill


---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
Reply

Marsh Posté le 25-09-2003 à 10:47:52   

Reply

Marsh Posté le 25-09-2003 à 11:32:23    

Je suis pas un expert en VB, ni un gand fan, mais est-ce normal de mettre un fichier dans un String ?

Reply

Marsh Posté le 25-09-2003 à 11:45:37    

C'est un fichier RTF, donc du texte. Et comme je fais des chercher/remplacer de morceaux de texte, en String c'est géré nativement. Mais je suis pas sectaire, si quelqu'un me propose une structure qui peut convenir ici, je prends !
 

JagStang a écrit :

Je suis pas un expert en VB, ni un gand fan, mais est-ce normal de mettre un fichier dans un String ?


---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
Reply

Marsh Posté le 25-09-2003 à 13:17:04    

bien sûr que c'est normal de mettre un fichier dans un string, surtout quand tu veux faire des search & replace dedans, je ne vois pas comment tu pourrais faire autrement ;)
 
sinon pour d'autres traitements, tu pourrais le charger dans un array de bytes.
 
Bon en fait le problème il est tout simple: tu dois charger ton fichier d'un seul coup et non byte par byte. Idem pour la sauvegarde. Comme je trouve VB super mal foutu au niveau I/O de base, je te file un bout de code direct:
 

Code :
  1. ' Read a file into a string
  2. Public Function IosFileReadStr(ByRef strPathName As String, ByRef strData As String) As Boolean
  3.     Dim hFile      As Integer
  4. On Error GoTo ErrHandler
  5.     ' Get a free file handle
  6.     hFile = FreeFile
  7.     ' Open file
  8.     Open strPathName For Binary Access Read As hFile
  9.     ' Get file contents
  10.     strData = Space$(FileSystem.FileLen(strPathName))
  11.     Get #hFile, , strData
  12.     ' Close file
  13.     Close hFile
  14.     IosFileReadStr = True
  15.     Exit Function
  16. ErrHandler:
  17.     IosFileReadStr = False
  18. End Function
  19. ' Write a file from a string
  20. Public Function IosFileWriteStr(ByRef strPathName As String, ByRef strData As String) As Boolean
  21.     Dim hFile     As Integer
  22. On Error GoTo ErrHandler
  23.     ' Get a free file handle
  24.     hFile = FreeFile
  25.     ' Open file
  26.     Open strPathName For Binary Access Write As #hFile
  27.     ' Store file
  28.     Put #hFile, , strData$    ' yes the $ is important!
  29.     ' Close file
  30.     Close hFile
  31.     IosFileWriteStr = True
  32.     Exit Function
  33. ErrHandler:
  34.     IosFileWriteStr = False
  35. End Function

Reply

Marsh Posté le 25-09-2003 à 14:25:09    

drasche a écrit :

bien sûr que c'est normal de mettre un fichier dans un string, surtout quand tu veux faire des search & replace dedans, je ne vois pas comment tu pourrais faire autrement ;)


 
Merci pour tout, ca marche nickel, plus d'erreur et c'est même vachement plus rapide !!


---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
Reply

Marsh Posté le 25-09-2003 à 14:45:16    

Si tu dois faire des traitements sur de gros fichiers, il faut bufferiser et gérer les passages d'un buffer à l'autre...
 
après pour rechercher ds un fichier ya des algos comme le BMH donne de pas trop mauvais résultat
 
en cherchant un peu sur google on doit pouvoir trouver du code VB tout fait pour cela
 
 :hello:


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed