Procédé pour modification fichier texte

SpiderTomtom Messages postés 11 Date d'inscription jeudi 23 juillet 2009 Statut Membre Dernière intervention 7 septembre 2010 - 4 sept. 2010 à 12:28
SpiderTomtom Messages postés 11 Date d'inscription jeudi 23 juillet 2009 Statut Membre Dernière intervention 7 septembre 2010 - 7 sept. 2010 à 00:16
Bonjour a tous,

Je me permets d'ouvrir ce topic pour connaitre la manière de modifier un fichier texte, utilisé en tant que base de données, a des endroits précis. Je m'explique :

J'ai un fichier texte formaté comme suit :

Famille1 # texte2 # texte3 # texte4
Famille2 # texte6 # texte7 # texte8
etc...

Le fichier comprend 400 lignes formaté de la même manière que ci dessus.

Je veux créer une form qui permettra de rentrer le nom de la famille et qui, après validation, retrouvera la ligne adéquat dans le fichier texte et affichera dans la form sous forme inputbox :
Famille2 / texte 6 / texte7 / texte8.

Ma question est la suivante :

Je souhaiterais laisser le choix à l'utilisateur de modifier un des texteX à sa convenance. Mais comment faire ??

J'avais donc penser spliter l'ensemble des lignes grâce au caractère "#" et mettre chaque ligne dans un tableau à deux dimensions. Après la modification devient plus facile. Puis à la fin, je réécris l'ensemble des lignes dans le fichier texte.

Ma méthode est elle appropriée sachant qu'il faudra creer un tableau à 2000 cases ?? L'occupation mémoire ne sera t'elle pas trop importante ?

Merci beaucoup par avance

8 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
4 sept. 2010 à 13:29
Salut

(tu nous confirmeras que tu travailles bien en VB.Net)

Ton problème c'est que les textes encadrés par tes # ont des longueurs variables.
Il n'est donc pas possible de pointer directement par indexation sur un champ particulier.
De plus, dans un fichier texte, on ne peut pas non plus accéder par indexation à la ligne X.

Oui, ta solution de lecture de chaque ligne et Split vers un tableau est la solution la plus évidente, mais engorgera la mémoire vive de la machine.
A notre époque où les Giga octets coulent à flôt, ce n'est pas trop un problème, mais imagine que la quantité de données augmente dans le temps.

La meilleure des solutions serait de transformer ton fichier texte en fichier XML ou de créer une base de données.

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
SpiderTomtom Messages postés 11 Date d'inscription jeudi 23 juillet 2009 Statut Membre Dernière intervention 7 septembre 2010
4 sept. 2010 à 14:27
Bonjour jack,

Merci pour ta réponse. Donc si je calcule rapidement :
1 lettre 1 octet, il y aura au maximum 150 lettres par ligne x 400 60 000 octects... C'est conséquent.

Peux t'on envisager d'ouvrir le fichier de texte, faire une recherche de famille et d'incrémenter une variable qui sera l'image du numéro de la ligne. Ensuite, on transformerai uniquement la ligne voulue et on l'écraserai après le traitement dans le fichier texte ?


Merci

PS : je suis bien en VB NET
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
4 sept. 2010 à 15:41
Oui, c'est tout à fait envisageable et préférable.
Seul bémol : à chaque lecture de ligne, tu devras déchiffrer le premier paramètre Famille, donc faire un Split à chaque ligne.
Il faudra relire le fichier depuis le début à chaque fois que tu voudras faire une recherche.
-> Peut-être un peu plus long que de s'adresser à un tableau, mais pour 400 lignes (même 40.000), ce n'est pas la mer à boire avec les puissants processeurs qui ornent nos machines, on n'est pas à 2 secondes prêt.
0
SpiderTomtom Messages postés 11 Date d'inscription jeudi 23 juillet 2009 Statut Membre Dernière intervention 7 septembre 2010
4 sept. 2010 à 16:53
Je viens de tilter quelque chose. Tout a l'heure, j'ai fait un calcul :

1 lettre 1 octet * 150 caractères * 400 lignes 60 000 octets soit 60 Ko . Ok ?

Pour 60 Ko, autant faire la 1er méthode car beaucoup plus simple non ?

Une autre question : Si je fais la création de ce fameux tableau, dans Form1_Load, es que le tableau sera encore présent en mémoire si je fait un autre programme comme Textbox1_click ?


Merci, Merci
0

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

Posez votre question
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
4 sept. 2010 à 20:31
Tout dépend où tu dimensionnes ce tableau.
Il faut qu'il soit déclaré en Public dans un Module afin qu'il soit accessible depuis tout le code.
0
SpiderTomtom Messages postés 11 Date d'inscription jeudi 23 juillet 2009 Statut Membre Dernière intervention 7 septembre 2010
5 sept. 2010 à 21:40
Bonsoir,

Donc je me suis mis en quête de faire mon petit programme mais je me suis heurté à un problème. Le logiciel ne doit pas être restreint mais évolutif. Donc, j'ai fait comme Jack a dit :

Dim Tableau_Temp(,) as string dans le Public Class Form5

Ensuite, dans Form5_Load

Je split ma ligne trouvé dans le fichier texte dans un premier tableau (Tableau) a une dimensions , puis a l'aide d'une boucle for je remplis mon Tableau_Temp grçace à tableau sous forme

For NumeroColonne = 0 to Tableau.length-1

Tableau_Temp (NumeroLigne,NumeroColonne)= Tableau(NumeroColonne)
next

Et la ça coince car je demande d'affecter une valeur dans un tableau qui n'a pas de dimensions...

Si je modifie juste Dim Tableau_Temp = (100,100) as string, là tout marche.

Comment faire pour retirer l'erreur sachant que je ne veux pas donner de dimensions à mon Tableau_Temp car je ne sais pas dans le temps
l'évolution du fichier texte ?


Merci
0
the_little_big_man Messages postés 86 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 14 février 2011
6 sept. 2010 à 10:31
un
redim preserve
marcherait non ???
A good excercise for the Heart is to bend down and help another up...
0
SpiderTomtom Messages postés 11 Date d'inscription jeudi 23 juillet 2009 Statut Membre Dernière intervention 7 septembre 2010
7 sept. 2010 à 00:16
Bonsoir,

Un redim preserve m'oblige à limiter dés le départ mon tableau alors que j'aimerais le plus possible de faire ce genre de manipulation...
0