Mon exemple n'est pas clair en effet, surtout qu'il est foireux
Bon, imagine que j'ai un fichier :
Code :
- CDE 123M Dupond P
- DEV 1590André Schmol X
- CDE 124Alfred V
|
Après rapide analyse, on trouve la structure suivante au fichier :
Type ligne = 3 caractères
Numéro = 6 caractères
Nom client = 16 caractères
Statut = 1 caractère
Saut de ligne : 2 caractères (chr(10) + chr(13))
Ainsi, pour lire le fichier ligne par ligne de façon efficace, je vais créer une struct (désolé, j'ai pas en tête la syntaxe pour dimensionner une chaîne ni pour écrire une struct, j'utilise donc la syntace VB )
Code :
- struct line
- typeLine as string * 3
- numero as string * 6
- nom as string * 16
- statut as string * 1
- endline as string * 2
- end struct
|
Ensuite, normalement, si le C# est un langage "normal", je peux lire directement le fichier, comme en VB, en faisant un (ou un truc du genre) :
Code :
- file.read(maStruct);
|
=> Ainsi, je lis la taille de la struct, et dans chaque élément de ma struct, j'ai la bonne valeur dedans. Deplus, le pointeur à l'intérieur du fichier a avancé extactement jusqu'à l'enregistrement suivant. En tant normal, c'est ce qu'il y a de plus rapide et de plus efficace pour lire/écrire dans un fichier, car tu te déplaces aisément à l'endroit exact de lecture/écriture, et en une seule instruction, tu lis tous les éléments d'un record.
Seul problème, c'est que si le programme ne sait pas à l'avance la structure à lire, ben c'est pas évidement de l'inventer
Mais en fait, j'ai réfléchis après avoir posté, et finalement, j'ai une solution simple :
Dans mon exemple, la struct fait : 3 + 6 + 16 + 1 + 2 = 28 caractères = 28 bytes.
J'ai donc juste qu'à déclarer un byte[28] et le lire. A priori, on peut déclarer simplement un tableau d'un taille dynamique, donc pas de problème.
Ensuite en stockant dans un coin (un autre tableau) la liste des champs, avec leur position et leur taille dans un autre tableau, il me sera relativement aisé de retrouver les bouts de tableau correspondants.
Donc en fait, à moins qu'il existe une solution plus propre, à condition qu'on puisse lire directement une struct dans un fichier en C# (y'a rien de moins sûr), je devrais pouvoir m'en sortir sans utiliser ma bidouille )
Message édité par Arjuna le 15-03-2005 à 00:25:42