Tout d’abord je veux vous féliciter sur ce magnifique forum.
Concernant mon besoin je cherche juste une aidé a suivi pour faire des vérifications paramétrable sur un fichier Txt d’une langueur fixe. (Voir ci-dessous la structure simplifier du fichier)
Par exemple :
Si le champ1 = «paris» Alor le champ12 doit être égal « France » si non il faut déclencher une erreur
si le champ2 = «Date exemple 01/05/2013» Alor le champ11 doit être égal « OK » si
01/05/2013 >champ2< 31/05/2013 si non le champ11 doit être égal «Non »
si le champ3 = «Null» Alor le champ10 doit être égal « 4587 »
si le champ3 <> «Null» mais mauvaise valeur (n’appartient pas à la liste) Alor le champ13 doit être égal « 00047 »
Etc.…
la structure simplifier du fichier
Champ Position Longueur
Champ1 1 8
Champ2 9 9
Champ3 18 4
Champ4 22 3
Champ5 25 4
Champ6 29 47
Champ7 76 4
Champ8 80 40
Champ9 120 45
Champ10 165 66
Champ11 231 66
Champ12 297 125
ehjoe
Messages postés728Date d'inscriptionsamedi 4 avril 2009StatutMembreDernière intervention30 mars 20144 16 mai 2013 à 23:25
Suite 2
ET eh ben donc :
- Tu fais une copie de ton fichier txt en fichier.TMP
- Tu ouvres ton fichier en lecture.
- Tu prends 3 listBox 1, 2 et 3, que tu rend "invisible" le temps du chargement, ce qui va plus vite, puis quand pleine tu affiche, ça fait un contrôle visuel.
- Tu fais une lecture séquentielle et tant que la ligne recherchée n'est pas atteinte, tu mets dans une listBox1.
- Quand la ligne est atteinte, tu mets dans une listBox2 cette ligne seulement.
- Et le reste tu le mets dans une listBox3
- Tu ferme ton fichier.
*
- Tu crées un variable V indicé du nombre de cmaps v(NbrChamps) puis tu mets tes champs de la listBox2 dans ces variables et tu effectues le traitement que tu veux.
- Tu efface la listbox2 et tu écrit dedans sur une ligne v(nbrChamps) comme tu le veux sur une ligne.
*
- Tu ouvres en écriture écrasement ton fichier txt.
- tu écris dans ton fichier txt les 3 listbox dans l'ordre 1, 2 et 3.
- Tu fermes ton fichier txt.
*
- Tu supprimes ton fichier TMP, sauf en cas d'erreur, tu le renomme en txt d'origine et tu recommence en résolvant l'erreur.
-------------------------
Tu peux aussi faire ça par écriture directe à l'octet, mais ça va être plus compliqué pour naviguer dedans, identifier les zones, les lires, les comparer et écrire ensuite... il te faudra passer par des variables, alors tant qu'à faire, mieux vaut mettre toute la ligne en variable comme susdit.
ehjoe
Messages postés728Date d'inscriptionsamedi 4 avril 2009StatutMembreDernière intervention30 mars 20144 14 mai 2013 à 22:13
Bonjour,
Dans ton exemple tu parles de lieu, de dates, or tu mets des valeurs numériques ?
Le plus simple est de tester dans une liste (qui sert de variable mais en plus permet de visualiser les erreurs éventuelles, listBox qui ensuite sera mis "invisible" quand ça marchera), car remonter dans un fichier va être plus compliqué (pointeur) que dans une liste (ouverture en binaire sans doute, à vérifier)...
Donc,
- Tu mets ton fichier dans une liste.
- Tu fais tes test un par un : exp :
si ligne 1 contient alors ligne 3 etc... au besoin tu modifie la ligne concernée.
Si ligne 2 ...
Et en dernier tu écrases tout en écrivant ta liste dans ton fichier txt.
Votre aidé est très intéressante, mais je crois que je n’ai pas bien expliqué le besoin.
Car cette vérification s’exécute sur plusieurs fichiers et chaque fichier contient des milliers de lignes et chaque ligne contient plusieurs champs
Mon objectif est de paramétrer l’application une seule fois par fichier .
D’autre part j’ai pas bien compris votre question (Dans ton exemple tu parles de lieu, de dates, or tu mets des valeurs numériques ? )
ci dessous un exemple du fichier
Prais 01/05/2013 ch4ch5test6 tes7tes8 tes9 4587 ok France
Prais 01/05/2013ch3 ch4ch5test6 tes7tes8 tes9 00047 Non France
Concernant votre remarque je vous informe que je n’ai pas encore commencé cette partir à la codification, je cherche d’abord une logique a survire.
D’autre part l’ouverture du fichier texte ce n’est pas toux compliqué, pour moi c’est la bonne méthode qui ma bloque
Très cordialement
Bien sûr que non, mon but est de minimiser le temps de développement le maximum possible.
Pour information ces fichiers sont exporter a une base de donner MySQL ou Access.
Chaque fichier peut contient jusqu’ à 20 000 lignes et jusqu'à 100 champs .
Et chaque fichier à un contrôle différent (mais avec même logique )
ehjoe
Messages postés728Date d'inscriptionsamedi 4 avril 2009StatutMembreDernière intervention30 mars 20144 17 mai 2013 à 00:56
Suite 4
De rien
reste après à voir si tu sauras trier et alimenter tes champs, les identifier, car s'ils ne font pas tous la même taille (pour une catégorie déterminée), ce sera difficile avec une grande perte de temps en lecture et comparaison...
Par exemple si ton 3e champ est une ville = Dublin, tu ne sauras pas si c'est une ville, alors ensuite il te fondra comparer à une liste de ville afin de savoir ce que c'est, mais si tu fais :
nom------- prenom----- Dublin--
nom2------ prenom2---- Dublin2-
*
ou
*
nom;prenom;Dublin
nom2;prenom2;Dublin2
Là se sera plus facile, je préfère la méthode du cadrage car elle présente l'avantage de pouvoir être exploité visuellement et de mieux voir les erreur, par contre elle tient bien plus de place que la méthode de rangement csv qui est plus difficile ) lire visuellement...