Re: execution d'un thread secondaire

Posté par lmame le 9/2/2006 14:56:54
Euh...

Ben imaginons que le fichier contienne à un instant "t" qui a une taille T1:
abcdefrehfiehfihrfhrfo
frhfiehfi
friejfoierjfioejfoijerfoijeroifj
forforjfojforjforjfojrfojrofjorfjorjfor


donc vous le lisez, puis vous voyez que la taille change, donc que des octets ont été rajoutés (fichier a la taille T2):
abcdefrehfiehfihrfhrfo
frhfiehfi
friejfoierjfioejfoijerfoijeroifj
forforjfojforjforjfojrfojrofjorfjorjfor
llllllllllllllllllllllllllllllll
mmmmmmmmmmmmmmmmmmmmmmmmmmmm


Comme vous avez utlisé le "flit", vous êtes déjà positionné à la fin de la ligne "forforjfojforjforjfojrfojrofjorfjorjfor"
Donc si vous faites un flit de "x" octets (T2-T1), vous aurez en mémoire:
llllllllllllllllllllllllllllllll
mmmmmmmmmmmmmmmmmmmmmmmmmmmm

et votre pointeur sera à la fin de la ligne des "m"...

Après, il suffit de détecter les "RC" (RC = \r\n ou caract(10)+caract(13)) (ou caract(10) ou caract(13) selon le type de renvoi à la ligne) et de faire une boucle...
Genre:
ch_org contenant "llllllllllllllllllllllllllllllll
mmmmmmmmmmmmmmmmmmmmmmmmmmmm"

nb_lig=chaineoccurrence(ch_org,RC)
nb_lig++ //on rajoute un car si on a:
         // ligne1 RC ligne2, il y a 2 lignes à traiter pour 1 RC

for k=1 to nb_lig
  temp=extraitchaine(ch_org,k,RC)
  //traiter la ligne contenue dans temp
end


A affiner bien sûr...



Autre cas, si vous n'avez pas une ligne complète, genre:
llllllllllllllllllllllllllllllll
mmmm


et plus tard:
llllllllllllllllllllllllllllllll
mmmmmmmmmmmmmmmmmmmmmmmmmmmm
nnnnnnnnnnnnnnnnn


il faudra détecter donc que la ligne des "m" était incomplète (il manquait le RC à la fin par exemple ou longueur de la chaîne etc...) et garder pour le flit d'après donc
mmmm

dans une variable, genre:
ch_org=flit(no_fichier,nombre_octets)
ch_org=last_buffer+ch_org //on rajoute le buffer de l'autre fois, les "m" non traités.

Cette contribution était de : http://old.wdforge.org/newbb/viewtopic.php?forum=14&topic_id=3505&post_id=14845