Bonjour,
Je viens de retomber sur un vieux code que j'ai écrit, qui permet de générer un fichier à pas fixe (ou record) à partir d'une description du fichier.
J'avais essayé de le rendre le plus générique possible (en passant notamment par un fichier de description des champs en XML) mais la solution que j'avais adopté me semble très lourde par rapport à ce que savait faire VB en natif par exemple.
Exemple de fichier " pas fixe" :
Nom : String / Position 1 / Longueur 20
Prenom : String / Position 21 / Longueur 20
Age : Int / Position 41 / Longueur 3
J'ai matérialisé les sauts à la ligne par des \n
Ce genre de fichiers sont très utilisés dans les EDI et autres transferts inter-systèmes. Le XML n'a pas tout remplacé, loin de là. Et niveau performances, y'a rien de mieux que ce genre de fichiers, le XML étant une usine à gaz à côté.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Alfred Dupont 25 \n Jules Desbois 43 \n Henriette Dupuis 103\n
En VB, ça se lisait/écrivait très facilement (à la faute de syntaxe près, ça fait longtemps que j'ai pas fait de VB ^^)
En C#, c'est une véritable usine à gaz pour reproduire la même chose, à ma connaissance tout du moins.
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 Type Personne Prenom As String*20 Nom As String*20 Age As String*3 CrLf as String*2 End Type Sub ReadFile() Open FileName For Random Access Read As #FileNbr Len = Len(Personne) Dim P as Personne Do Until EOF(FileNbr) Get #FileNbr, , P MsgBox("La personne " & P.Prenom & " " & P.Nom & " a " & P.Age & " ans.") Loop Close #FileNbr End Sub
Avant que je poste ce que j'avais fait, déjà, est-ce que vous avez des solutions "génériques" pour faire ça ?
C'est à dire du code qui évite de noyer 25 sous-chaines avec des nombres magiques sur 50 lignes.
Le but étant d'avoir en sortie :
- Un objet représentant une ligne "typée" du fichier (il peu y avoir des personnes, mais aussi d'autres types de records)
- Dont les champs sont accessibles facilement, comme dans une structure
Partager