Octet "00" remplacé par "20"

cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012 - 10 août 2004 à 02:02
cs_scander Messages postés 1 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 25 juin 2005 - 25 juin 2005 à 17:24
Bonjour/soir,

J'ai récupéré le contenu d'un fichier dans une variable puis j'ai copié cette variable dans un nouveau fichier.
J'ai 2 problèmes:

1) Un saut de ligne est inséré en début de fichier

2) Tous les octets "00" ont été remplacés par un octet "20".

Comment éviter ça ?
Merci pour vos réponses. :)
$eb

14 réponses

cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
10 août 2004 à 05:28
En fait, pourquoi le code ci-dessous ne donne pas un fichier valide ?
'---
F = FreeFile
Open CommonDialog1.FileName For Binary Access Read Lock Read As #F
Buffer = Input(LOF(F), F)
Close #F

F = FreeFile
Open App.Path & "\test" For Output As #F
Print #F, Buffer
Close #F
'---

Evidemment, j'ai un saut de ligne en début et en fin de fichier mais même en les supprimant le fichier n'est pas valide.
$eb
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
10 août 2004 à 08:20
Ca donne n'importe quoi car tu ne suis pas de logique dans ton algo, tu emplois la methode binaire pour ouvrir et lire ton fichier mais pour l'ecrire tu emplois la methode texte. il faut rester coherent et plutot faire comme ceci :

Nb: toujours declarer ses variables et les typer

Dim Buffer As String
Dim F        As Integer

F = FreeFile
Open CommonDialog1.FileName For Binary As #F
Buffer = Space(LOF(F))
Get #F, , Buffer
Close #F

F = FreeFile
Open App.Path & "\test" For Binary As #F
Put #F, Buffer
Close #F


@+

E.B.
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
10 août 2004 à 08:30
Merci, je teste tout de suite.
$eb
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
10 août 2004 à 08:37
"La variable utilise un type Automation non géré par Visual Basic"

$eb
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
10 août 2004 à 09:35
une erreure s'est glissé dans le code il faut lire :

Put #F, , Buffer


@+

E.B.
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
10 août 2004 à 10:04
Je l'avais corrigée.
Mais c'est sur cette ligne que le "débugeur" m'emmène:

Get #F, , Buffer

Tibabou
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
10 août 2004 à 10:40
As tu oublié cette ligne :

Dim Buffer As String

"La variable utilise un type Automation non géré par Visual Basic"

car pour cette erreure ya pas d'autre explication ajoute "Option Explicit" en toute premiere ligne du code de ta From ça devrais te permettre de voir plus clair dans les definitions de variable

@+

E.B.
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
10 août 2004 à 11:20
Non je n'ai pas oublié la définition de la variable.
J'insère toujours "Option Explicit" en haut de mon code.
Je comprends pas où est l'erreur...

Tibabou
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
10 août 2004 à 11:32
ha...piste pour trouvée le problème: la variable "Buffer" est vide.
Le fichier existe bien pourtant, il s'ouvre correctement.
C'est au niveau de cette ligne le pb alors:

Buffer = Space(LOF(F))

Après cette ligne, le buffer est vide.

J'ai testé le code que tu m'as donné dans une autre feuille avec un simple bouton et il fonctionne je confirme mais pas dans la procédure où je veux qu'il soit.

Tibabou
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
10 août 2004 à 11:50
Bon bah j'ai enfin trouvé:

J'avais ceci dans mon code:

Open chemin(i).Text For Binary As #F

que j'ai remplacé par cela:

Dim LeChemin As String
LeChemin = chemin(i).Text
Open LeChemin For Binary As #F

J'aurais pas penser. Merci encore pour ton aide :-)
Tibabou
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
10 août 2004 à 11:59
NON !!! Désolé pour les multi-posts mais j'ai la poisse en ce moment.

Lorsque je mets un point d'arrêt sur cette ligne:

Get #F, , Buffer

et que je mets mon curseur sur "Buffer", je vois: Buffer=" ..."
C'est à ce moment là que j'ai posté pour dire que ça marchait mais j'aurais pas dû:
Si j'enlève ce point d'arrêt, j'ai l'erreur, je replace mon curseur sur "Buffer", et je vois: Buffer=vide .

Comprend pu rien au VB.... :sad)
Tibabou
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
10 août 2004 à 15:25
J'ai trouvé (cette fois c'est -presque- bon):
Avant j'avais ça en déclarations:

Dim Var1, Var2, Buffer, Var3 as String

et j'ai remplacé par:

Dim Var1, Var2, Var3 as String
Dim Buffer as String

Je comprends pas la différence mais bon, pourquoi pas...

Sinon, j'ai toujours mon pb: les octets "00" sont remplacés par des "20"...help... :sad)
Tibabou
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
10 août 2004 à 21:35
tu dois mettre:
Dim Var1 As String, Var2 As String, Var3 as String
sinon Var1 et Var2 sont pris en type Variant
Daniel
0
cs_scander Messages postés 1 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 25 juin 2005
25 juin 2005 à 17:24
Bien joué !
J'ai rencontré le même problème que TIBABOU et votre explication m'a rappelé qu'on ne mélange pas les choux et les carottes en Math et encore moins en Visual Basic.
Un grand MERCI et Bravo pour votre site !
0
Rejoignez-nous