Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD1O] lire un fichier texte en flux continu ?

3 réponses
Avatar
Vincent
Bonjour,

j'ai un programme qui écrit dans un fichier texte de log ( c'est un
programme que je n'ai pas développé et j'ai pas les sources).
avec mon programme windev, j'aimerai lire chaque nouvelle ligne écrite dans
ce fichier de façon continue.
Est ce possible avec windev ? sans avoir à ouvri/lire/fermer ce fichier
toutes les secondes ( surtout s'il est volumineux )

Ce qui m'interesse c'est lire ligne par ligne ( non pas caractere par
caractere, mais je peux adapter) , ca ressemble un peu à une fonction tail
sous unix

une idée ?

Merci

Vincent

3 réponses

Avatar
Pierre BOUSQUET
1. ouvrir le fichier au lancement du projet
2. se positionner à la dernière lecture (voir 4.) avec fPositionne()
3. lancer un timer qui appelle la procédure 4.
4. lire les lignes avec flitligne() et stocker la position en cours
dans le fichier avec fPositionne()
5. fermer le fichier lors de l'arret de l'appli

Vincent vient de nous annoncer :
Bonjour,

j'ai un programme qui écrit dans un fichier texte de log ( c'est un programme
que je n'ai pas développé et j'ai pas les sources).
avec mon programme windev, j'aimerai lire chaque nouvelle ligne écrite dans
ce fichier de façon continue.
Est ce possible avec windev ? sans avoir à ouvri/lire/fermer ce fichier
toutes les secondes ( surtout s'il est volumineux )

Ce qui m'interesse c'est lire ligne par ligne ( non pas caractere par
caractere, mais je peux adapter) , ca ressemble un peu à une fonction tail
sous unix

une idée ?

Merci

Vincent



--
Pierre BOUSQUET

" Ne me dites pas que ce problème est difficile.
S'il n'était pas difficile, ce ne serait pas un problème. "
Avatar
b.engelmajer
sFic est une chaîne = "c:temptest.txt"
nTaille est un entier = fTaille(sFic)
nFic est un entier = fOuvre(sFic,foLecture)
sLigne est une chaîne

// Méthode 1. Se baser sur la taille
fPositionne(nFic,0,fpFin)
BOUCLE
SI nTaille <> fTaille(sFic) ALORS
trace(fLitLigne(nFic))
nTaille = fTaille(sFic)
FIN
Multitâche(-100)
FIN
// Méthode 2. Se baser sur le renvoi de 'fin du fichier' => EOT (à mon
avis , la bonne méthode)
fPositionne(nFic,0,fpFin)
BOUCLE
sLigne = fLitLigne(nFic)
SI sLigne <> EOT ALORS trace(sLigne)
Multitâche(-100)
FIN
Avatar
patrice
"Vincent" a écrit dans le message de
news:45d2cc96$0$5082$
Bonjour,

j'ai un programme qui écrit dans un fichier texte de log ( c'est un
programme que je n'ai pas développé et j'ai pas les sources).


faut juste espérer qu'il ferme ou flush apres écriture sinon les nouvelles
lignes ne sont pas dispo immédiatement

avec mon programme windev, j'aimerai lire chaque nouvelle ligne écrite


dans
ce fichier de façon continue.
Est ce possible avec windev ? sans avoir à ouvri/lire/fermer ce fichier
toutes les secondes ( surtout s'il est volumineux )



l'ouverture n'est pas dépendante de la taille (ne pas utiliser fchargetexte
mais fouvre)
il faut ouvrir le fichier régulièrement et mémoriser la taille renvoyer par
fpositionne() pour savoir à partir de où continuer la lecture