Open et Get avec Tableau de byte ?

Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 - 29 déc. 2008 à 15:57
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 30 déc. 2008 à 02:38
Bonjour !

Je veux savoir ce que fait exactement Get en remplissant un tableau de byte.

Il supprimé / crée / remplit ?
ou
Il efface / remplit ?
ou
Il remplit en écrasant ?

Exemple:

Dim arGet(512) as bytes

Open "a.txt" for input as #1 len = 512
While not eof(1)
Get #1, arGet
Wend
Close #1

7 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 déc. 2008 à 18:17
Salut
Get n'est qu'une lecture.
Si tu as défini ton tableau de Byte avec 512 maxi, donc 513 éléments puisque les tableaux commencent à l'index 0 (sauf avec "Option Base 1" en tête de code), tu liras 513 Bytes à chaque instruction Get.

Nota 1 :
L'instruction Get s'utilise après l'ouverture en mode Bianry, pas Input
   Open "a.txt" For Binary Access Read As #1
et on ne précise pas la longueur de lecture, cette longueur est définie par la taille de la variable qui recevra les données, ici, ton tableau de Bytes

Nota 2 :
La syntaxe de l'instruction n'est pas bonne, il manque l'offset 'x' :
   Get #1, x, arGet
Si tu dois lire sans préciser à quel offset te caler, il suffit de ne rien mettre entre les virgules :
   Get #1, , arGet
Il lira à l'endroit où il se trouve.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 déc. 2008 à 18:19
PS : Lecture, c'est à dire qu'il lit les Bytes contenus dans le fichier et les écris dans ton tableau.
Le fichier reste intact.
Voir instruction Put pour l'écriture vers le fichier (attention à l'offset)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
29 déc. 2008 à 19:45
Bonjour

La fonction Eof() est plutôt utilisée pour les fichiers ouverts en Input ou Random. En Binary, il est préférable d'utiliser LOF, Loc ou la fonction Seek.


Amicalement
0
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
29 déc. 2008 à 20:32
Jusqu'à là je suis d'accord sur les précisions.

La situation:
Mon tableau est remplit au premier passage de 512 octets lus.
Au deuxième passage de Eof ou Lof que fait concrètement Get avec ce tableau ?

Exemple, lecture n°1
arGet(1) = FF
arGet(2) = A5

Exemple, pré-lecture n°2 (action de get ???)
arGet(1) = ""
arGet(2) = ""
ou
erase arGet
redim arGet(512)
ou
arGet(1) = 0

arGet(2) = 0
0

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

Posez votre question
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
29 déc. 2008 à 22:22
Je cherche a comprendre un bug du VB lors d'une lecture de deux fichiers simultanément.

Comment expliquer que je compare deux fichiers de 50 mo en 5 sec.
Alors qu'en comparant un fichier de 150ko et un fichier de 270ko il met 10 sec ?

Le même code sauf que le problème est invisible !!!
Que fait GET !!!!???
Il a peur des 120ko en trop ?

Voici le bout de code:

Open FichierA For Binary As #1 Len = MEMORY_BLOCK
Open FichierB For Binary As #2 Len = MEMORY_BLOCK 
          
    While Not Loc(1) > lenFA
       
        Get #1, , bufReadOrg
        Get #2, , bufReadMod
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
29 déc. 2008 à 22:46
Ben... jack a parfaitement résumé l'action : tu liras 513 Bytes à chaque instruction Get.
Donc à chaque Get, tu liras 513 bytes (par défaut) ou 512 Bytes (avec Option Base 1) à la position actuelle (si offset n'est pas précisé) ou à la position x (si tu précises l'offset) du fichier.

Il n'y a donc aucune pré-lecture, et je ne vois pas ce que tu veux dire par ce mot. Quant à "l'action de Get" elle est au 2e passage identique à celle au premier passage.

Cordialement
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
30 déc. 2008 à 02:38
Re
Pense à regarder l'aide de VB6, tu y trouveras des explications.
Comme je le disais, en dimensionnant un tableau de 0 à 512, cela fait 513 Bytes lus à chaque passe.
Si tu ne précises pas l'offset, le pointeur se déplace à la fin de la dernière zone lue.
La lecture suivante lira donc les données situées derrière.
Par contre, je ne sais pas ce qui se passe si tu essaye de lire 513 bytes alors qu'il ne reste que 10 bytes entre la position actuelle et la fin du fichier.

Si tu veux lire une zone puis la relire ensuite, il faut utiliser :
- Soit donner un chiffre à l'offset, entre les 2 virgules de la commande Get
- Soit utiliser la fonction Seek pour positionner le pointeur au bon endroit; à toi de le gérer.

Si tu nous disais ce que tu veux faire, on aurais peut-être une chance de te dire comment faire.

Pour l'instant, essaye de lire et de comprendre ce qu'on te répond + Regarde l'aide

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Rejoignez-nous