Lecture rapide dans un fichier txt [Résolu]

depelek 26 Messages postés lundi 3 février 2003Date d'inscription 4 juin 2008 Dernière intervention - 4 mai 2006 à 10:57 - Dernière réponse : misislan84 1 Messages postés jeudi 12 avril 2007Date d'inscription 15 avril 2007 Dernière intervention
- 15 avril 2007 à 12:44
Bonjour,

J'aurais une question bien spécifique.

J'enregistre un fichier *.txt avec la fonction :

Open Combmulti For Output As #2
Write #2, a, b, c, d
close #2

j'ai enregistré environ 3 millions de lignes avec donc sur chaque ligne la donnée a b c et d.

Le problème c'est que je voudrais lire la ligne 215542 et puis revenir à la ligne 1124 sans être obligé de lire le fichier complet à chaque fois et être obligé de le fermer et de le réouvrir.

Ma question est donc : est ce que l'enregistrement de départ est bon ou doit je le modifier???

Et qu'elle est la fonction pour lire dans un fichier plusieurs ligne à différents endroit sans être obligé d'ouvrir et de fermer le fichier à chaque fois

Merci pour vos infos

A+
Afficher la suite 

9 réponses

Meilleure réponse
daetips 142 Messages postés jeudi 10 juillet 2003Date d'inscription 10 novembre 2007 Dernière intervention - 4 mai 2006 à 12:58
3
Merci
get#2, debut,mastring

or debut, c pas le numéro de ligne, mais le numéro de caractère, donc si chaque ligne a une longueur constante, tu peux faire un petit calcul...

Daetips

Merci daetips 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 82 internautes ce mois-ci

zeunz 201 Messages postés jeudi 26 février 2004Date d'inscription 30 juin 2008 Dernière intervention - 4 mai 2006 à 11:39
0
Merci
slt, voici un bout de mon code. j'ouvre un fichier avec la fct readline (lecture de ligne par ligne) et puis le ferme a la fin. tu peux dc changer le code en mettant une boucle for avec un compteur par exemple. (en remplacant la boucle Do). alors comme tu as un bon paquet de ligne, ca risque certainement de ramer un peu....beaucoup...
si qqun a d'autres proposition....
bye, zeunz.

'Déclaration des variables

Dim Lecture As String
Dim TxtFile As Object
dim Fso as new filesystemobject


'Ouverture du fichier existant
Set TxtFile = Fso.OpenTextFile(CheminFichier, ForReading, True)

'Chargement des données
If Not TxtFile.AtEndOfLine Then
'Analyse des données
Do
'Lecture des données
Lecture = TxtFile.ReadLine
Loop While Not TxtFile.AtEndOfLine
End If


'Fermeture du fichier en écriture.
TxtFile.Close
depelek 26 Messages postés lundi 3 février 2003Date d'inscription 4 juin 2008 Dernière intervention - 4 mai 2006 à 11:52
0
Merci
Ben oui je sais que ça risque de ramer!!!

Le problème c'est que la fonction doit être rapide!!

Je me souviens quand je programmais en quikbasic j'avais une fonction du genre :

OPEN "r", #2, "c:\*.dat"
GET #2, numéro de ligne, variable$
close #2

Et ça, ça marchait nikel et c'était rapide

Alors en clair je recherche le même genre mais pour vb

Merci

A+
zeunz 201 Messages postés jeudi 26 février 2004Date d'inscription 30 juin 2008 Dernière intervention - 4 mai 2006 à 11:58
0
Merci
ouais je capte ce ke tu veux dire. regarde ds d'aurtres messages du forum sur get, il y en a justement.
car je ne ss pas un specialiste de cette fct.
good luck

zeunz
NHenry 14229 Messages postés vendredi 14 mars 2003Date d'inscription 14 juillet 2018 Dernière intervention - 4 mai 2006 à 12:51
0
Merci
Bonjour

VB est lent par sa nature.
En quel VB tu code ?
Il s'est écoulé bcp de temps depuis QB (le bon vieu temps sous DOS ) Et je n'ai jamais utilisé ce type de commande.
Et l'exemple donné par zeunz utilise FSO qui est lent aussi, donc le code en VB sera très lent.
Si tu veux du rapide tourne toi vers C++ ou autres langages plus rapide que VB, sinon acommodes-toi-en.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
jipere 17 Messages postés mardi 7 mars 2006Date d'inscription 21 septembre 2011 Dernière intervention - 4 mai 2006 à 15:10
0
Merci
Il y a très longtemps, on créait un fichier index, qui permettait de faire cela.
Si le fichier ne change pas trop, on lit le fichier par enreg de 16Ko (par ex), et on compte toutes les lignes (CHR(13)=fin de ligne) et
toutes les 1000 lignes par EX, on écrit le nombre d'enregistrements de 16k qu'il a fallut, ainsi jusqu'à la fin du fichier, chaque index est écrit dans un fichier.
ce fichier sera chargé et utilisé pour accélérer le pointage sur le, gros fichier. il donnera accés à un début de 1000 lignes, mais il faudra débiter les blocs en enregistrements pour retrouver l'1 des 1000 enregistrements?
Je n'ai pas mieux, mais c'est ce qu'il y a de plus performant.
depelek 26 Messages postés lundi 3 février 2003Date d'inscription 4 juin 2008 Dernière intervention - 4 mai 2006 à 16:33
0
Merci
Pour compléter la réponse de daetips,

j'ai fait le code suivant :

f$ = "C:\nouveau.txt"
l=1
Open f$ For Random As #2

'permet d'enregistrer mes 4 chiffres dans une même combinaison
comb$ = comb$ + a$ + b$ + c$ + d$

'enregistrement dans fichier
Put #2, l, comb$
l = l + 1

'lecture fichier à la 549ème ligne directement
Get #2, 549, combin$

Voilà!!! je peux lire dans n'importe quel ordre sans refermer mon fichier

Merci pour m'avoir aiguillé

A+
cs_kingson 1 Messages postés mercredi 7 décembre 2005Date d'inscription 15 avril 2007 Dernière intervention - 15 avril 2007 à 12:00
0
Merci
slt,

dit moi j'ai vu ton code et j'aimerai faire la meme chose mais pour ouvrir une feuille worksheet uniquement en lecture. tu saurais comment le faire? en visual basic biensur.
merci
misislan84 1 Messages postés jeudi 12 avril 2007Date d'inscription 15 avril 2007 Dernière intervention - 15 avril 2007 à 12:44
0
Merci
salut

je veux faire une simulation d'un moteur Diesel sous VB (obligatoire) et j'ai besoin de l'aide si jamais y a un programme (code) déja fais veuillez me le communiquer.
  [mailto:misislan84@hotmail.com misislan84@hotmail.com]

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.