L'objectif de ce logiciel (cadre 5) est de compléter les détails des entrées déjà définies dans la base originale (cadre1 et 2).Cette base est suffisamment simple pour être gérée à la main, mais elle contient tout de même plus d'une centaine d'entrées différentes qui ont été additionnées progressivement.
Sont ajoutés: les références antérieures dans la base, le numéro d'ordre,le nombre d'image par url et la taille de ces images(cadre 3 et 4).
Au passage la taille des fichiers et leur nombre sont évalués
<HTML> ... <CENTER><TABLE BORDER=2 > <TR><TD align=center> <H2>CATALOGUE DES TRAVAUX PAR ELEVE</H2> </TD></TR><tr><td><br><b><h3>Espace Représenté et Perspective Centrale</h3></b></td></tr> <tr><td align=center><b><A HREF="pers2.htm">Laétitia B....</A></b></td></tr> <tr><td align=center><b><A HREF="pers4.htm">Patrick P....</A></b></td></tr> <tr><td align=center><b><A HREF="pers12.htm">Christophe C.....</A></b></td></tr> ... </HTML> |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<HTML> ... <CENTER><TABLE BORDER=2 ><TR><TD colspan=9 align=center><H2> CATALOGUE DES TRAVAUX PAR ELEVE </H2></TD></TR><tr><td>autres travaux</td> <td>nø</td><td>nom</td><td colspan=4>nombre d'images</td><td>taille</td><td>autres travaux</td> </tr><tr><td colspan=9><br><b><h3>Espace Représenté et Perspective Centrale</h3></b></td></tr> <tr><td> </td><td><a name="1"></a><b>1</b></td> <td align=center><b><A HREF="pers2.htm">Laétitia B....</A></b></td><td colspan=4> 1 img </td><td>13K</td><td><a HREF="#81">Suivant</a></td></tr><tr><td> </td><td> <a name="2"></a><b>2</b></td><td align=center><b> <A HREF="pers4.htm">Patrick P....</A></b></td> <td colspan=4>1 img</td><td>17K</td><td> </td> </tr> ... </HTML> |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uses dos,crt; type listeptr=^liste; liste=array[0..254] of string; ancrenom=record Anombre:integer; Anom:string[30]; Asuivant:integer; Aprecedent:integer; nimg:integer; end; listeAptr=^liste_a; liste_a= array[0..254] of ancrenom; var f,f2:text; dirinfo:searchrec; lf,opath,dirpath,lftemp:string; liste1, liste2: listeptr; listea: listeAptr; x,l,h,z,t,n,nblgn, y1,partic,orign:integer; y:word; nom,prenom,buf,buf2,buf3, buf4,buf5,buf6,buf7, pl,hfic:string; car:char; numimg,numimgmax:integer; longueur, pntnom, tailletotaleimg, tailletotalehtm, nombretotalimg, nombretotalhtm, nombretotalelv:longint; maxfiltre:integer; themegeneraux:integer; procedure filtreliste(var x:integer); var y:integer; begin for y:=x+1 to pntnom do begin if listea^[y].anom=nom then begin if listea^[y].aprecedent=0 then listea^[y].aprecedent:=x; if listea^[x].asuivant=0 then listea^[x].asuivant:=y; filtreliste(y); end; end; end; procedure extrait_nom(compte_eleve:boolean); var nbv:integer; augmnbelv:boolean; begin (* on cherche un point de repère pour la ...*) if pos('align=center><b><A',lf)<>0 then begin (* ...récupération du nom: 'align=center' se trouve necessairement dans une ligne où se trouve un nom *) z:=0; buf[0]:=#1; (* Le nom est juste avant le tag de fin d'ancre '</a>'. il est précédé d'un espace vide ... on le récupère à l'envers. *) while (car<>' ') do begin car:=lf[pos('</A>',lf)-1-z]; buf[0]:=chr(z+1); buf[z+1]:=car; inc(z); end; car:=#0; t:=0; nom[0]:=chr(z-1); (* on le remet à l'endroit: *) for h:=z-1 downto 1 do begin inc(t); nom[t]:=buf[h]; end; (* on évacue le nom pour faciliter la récupération du prénom *) delete(lf,pos('</A>',lf)-length(nom)-1,length(nom)+1); (* récupération du prénom*) z:=0; buf[0]:=#1; (* même procédure en gros que pour le nom.. *) while (car<>'>') do begin car:=lf[pos('</A>',lf)-1-z]; buf[0]:=chr(z+1); buf[z+1]:=car; inc(z); end; car:=#0; t:=0; prenom[0]:=chr(z-1); for h:=z-1 downto 1 do begin inc(t); prenom[t]:=buf[h]; end; (* c'est donc un nom supplémentaire récupéré dans le fichier on le note dans pntnom *) inc(pntnom); (* on documente la liste de nom *) listea^[pntnom].anom:=prenom+' '+nom; listea^[pntnom].anombre:=0; if compte_eleve then begin augmnbelv:=true; for nbv:=0 to pntnom-1 do begin if listea^[pntnom].anom=listea^[nbv].anom then augmnbelv:=false; end; if augmnbelv then inc(nombretotalelv); end; (* restauration de l'état du tampon pour d'autres opérations *) lf:=liste1^[x]; end; end; var thumbimg, thumbtaille:longint; (* *) procedure docoriginefile; var f,f2:text; dirpath,lf, nom :string; t,x,y,z, u,v,n :integer; car :char; dirinfo:searchrec; theme:integer; begin (* 0 *) theme:=0; thumbtaille:=0; tailletotalehtm:=0; (* documenter l'adresse du repertoire *) dirpath:='d:\internet\htdogpro\site_int\atlrinfo'; (* Comme on a déjà fait le travail au moins une fois la taille de ces fichiers peut être ajoutée à la taille globale de l'ensemble *) findfirst('basenw2.htm',anyfile,dirinfo); tailletotalehtm:=tailletotalehtm+dirinfo.size; findfirst(dirpath+'\quelqdes.htm',anyfile,dirinfo); tailletotalehtm:=tailletotalehtm+dirinfo.size; (* on peut commencer: on ouvre le fichier cible, qui contient une serie d'url sur des pages thématiques qui regroupent les 'thumbnails' des travaux d'élèves. Rencontrer une url revient à identifier un thême. *) assign(f,dirpath+'\quelqdes.htm'); reset(f); (* on repete cette opération jusqu'à la fin du fichier *) while not eof(f) do begin (* 1 *) (* lire une ligne de texte *) readln(f,lf); (* si on repere une URL *) if pos('HREF="',lf)<>0 then begin (* 2 *) (* on recupere le contenu de l'adresse*) y:=0; t:=pos('HREF="',lf)+6; while lf[t]<>'"' do begin (* 3 *) inc(y); nom[0]:=chr(y); nom[y]:=lf[t]; inc(t); end; (* 3 *) (* on met à jour le compteur de thême. *) inc(theme); (* certaines feuilles ne contiennent qu'une seule référence qui pointe directement sur une feuille unique avec ses images au format définitif qui se trouve dans un sous répertoire, elles sont traitées à part sinon... pour le traitement de ces exceptions allez en *10*. *) if pos('/',nom)=0 then begin (* 4 *) findfirst(dirpath+'\'+nom,anyfile,dirinfo); tailletotalehtm:=tailletotalehtm+dirinfo.size; assign(f2,dirpath+'\'+nom); reset(f2); while not eof(f2) do begin (* 6 *) readln(f2,lf); if pos('IMG ',lf)<>0 then begin (* 7 *) y:=0; t:=pos('SRC="',lf)+5; while lf[t]<>'"' do begin (* 8 *) inc(y); nom[0]:=chr(y); nom[y]:=lf[t]; inc(t); end; (* 8 *) while pos('/',nom)<>0 do begin (* 9 *) insert('\',nom,pos('/',nom)); delete(nom,pos('/',nom),1); end; (* 9 *) findfirst(dirpath+'\'+nom,anyfile,dirinfo); thumbtaille:=thumbtaille+dirinfo.size; inc(thumbimg); end; (* 7 *) end; (* 6 *) close(f2); end (* 4 *) else begin (* 10 *) if pos('IMG ',lf)<>0 then begin (* 11*) y:=0; t:=pos('SRC="',lf)+5; while lf[t]<>'"' do begin (* 12*) inc(y); nom[0]:=chr(y); nom[y]:=lf[t]; inc(t); end; (* 12*) while pos('/',nom)<>0 do begin (* 13*) insert('\',nom,pos('/',nom)); delete(nom,pos('/',nom),1); end; (* 13*) findfirst(dirpath+'\'+nom,anyfile,dirinfo); thumbtaille:=thumbtaille+dirinfo.size; inc(thumbimg); end; (* 11*) end; (* 10 *) end; (* 2 *) end; (* 1 *) close(f); numimgmax:=0; tailletotaleimg:=thumbtaille; nombretotalimg:=thumbimg; nombretotalhtm:=theme+2; nombretotalelv:=0; maxfiltre:=0; themegeneraux:=theme; end; begin (* *) docoriginefile; dirpath:=paramstr(1); (* pour preserver le fichier original d'une erreur de programmation *) assign(f,dirpath+'\baselvs.htm'); reset(f); assign(f2,'basenew.htm'); rewrite(f2); (* on lit et on copie sur le fichier local *) while not eof(f) do begin readln(f,lf); x:=1; z:= length(lf); (* on en profite pour passer les refs à des fichiers sur système unic en basdecase *) while x<length(lf) do begin if lf[x]='"' then begin y:=x+1; car:=lf[y]; while car<>'"' do begin car:=lf[y]; if (car in ['A'..'Z']) and (car<>'"') then lf[y]:=chr(ord(lf[y])+32); inc(y); if y>=length(lf) then car:='"'; end; car:=lf[y]; x:=x+y; if x>length(lf) then x:=length(lf); end; inc(x); end; writeln(f2,lf); end; (* c'est fait on ferme tout. *) close(f2); close(f); (* initialisation de liste : liste 1 contient les strings originales liste 2 les strings modifiées et les lignes ajoutées listea contient les ancres sur les noms d'élèves *) new(liste1); new(liste2); new(listea); fillchar(listea^,sizeof(listea^),#0); (* mise à jourde la liste 1 sur la base du fichier basenew.htm n definit le nombre de ligne à traiter *) assign(f2,'basenew.htm'); reset(f2); while not eof(f2) do begin readln(f2,liste1^[n]); inc(n); end; close(f2); (* *) pntnom:=0; (* *) for x:=0 to n-1 do begin (* 1 *) (* on recupère la ligne dans un tampon de traitement *) lf:=liste1^[x]; extrait_nom(true); (* le nom que l'on vient de récupérer renvoie à un fichier html: on doit savoir lequel. *) if pos('A HREF="',lf)<>0 then begin (* 2 *) t:=pos('A HREF="',lf)+8; y:=0; (* on est sûr de pointer sur un fichier html...on le récupère... *) while lf[t]<>'"' do begin (* 3 *) inc(y); hfic[0]:=chr(ord(y)); hfic[y]:=lf[t]; inc(t); end; (* 3 *) (* on ajoute l'adresse réelle ... *) hfic:=dirpath+'\'+hfic; (* on le pèse... *) findfirst(hfic,anyfile,dirinfo); (* on additionne la taille et on augmente le nombre de fichier htm *) tailletotalehtm:=tailletotalehtm+dirinfo.size; inc(nombretotalhtm); (* on l'ouvre.. *) assign(f,hfic); reset(f); (* filtre le fichier pour trouver toutes les refs à une image elles peuvent être nombreuses et rien ne permet de savoir combien elles seront au maximum on se sert de numimg pour déterminer la quantité qu'il faudra comparer à numimgmax pour effectuer la documentation de la cellule tableau en colspan *) numimg:=0; while not eof(f) do begin (* 4 *) (* charger une ligne dans le buffer *) readln(f,pl); (* chercher le signe d'une image *) if (pos('IMG SRC="',pl)<>0) then begin (* 5 *) (* incrémenter le compteur d'image *) inc(numimg); (* positionner un pointeur sur le début du nom de fichier *) t:=pos('IMG SRC=',pl)+9; y:=0; (* récuperer le nom de fichier *) while pl[t]<>'"' do begin (* 6 *) inc(y); hfic[0]:=chr(ord(y)); hfic[y]:=pl[t]; inc(t); end; (* 6 *) (* modifier le nom de fichier pour l'adapter au systeme dos *) insert('\',hfic,pos('/',hfic)); delete(hfic,pos('/',hfic),1); (* récupérer l'information de taille *) findfirst(dirpath+'\'+hfic,anyfile,dirinfo); str((dirinfo.size div 1024),buf); tailletotaleimg:=tailletotaleimg+dirinfo.size; (* documenter le buffer lf *) insert('<td>'+buf+'K</td>',lf,pos('</tr>',lf)); inc(nombretotalimg); end (* 5 *) end; (* 4 *) close(f); (* savoir si on a dépassé le nombre max d'image par fichier *) if numimg>=numimgmax then numimgmax:=numimg; (* mettre à jour la ligne dans le tableau *) listea^[pntnom].nimg:=numimg; str(numimg,buf); insert('<td>'+buf+ ' img </td>', lf, pos('</A></b></td>',lf)+13); liste1^[x]:=lf; end; (* 2 *) if pos('</TABLE>',lf)<>0 then begin (* 2 *) str(tailletotaleimg div 1024,buf); str(tailletotalehtm div 1024,buf2); str(nombretotalelv ,buf3); str(nombretotalhtm ,buf4); str(nombretotalimg ,buf5); str(thumbimg ,buf6); str(themegeneraux,buf7); insert('<tr><td align=center><br><b>'+ buf5+ ' images (dont '+buf6+' thumnails) : '+ buf+ ' k0 <br>'+ buf4+' fichiers htm: '+ buf2+' ko<br>'+ buf3+' eleves<br>'+ buf7+' themes...<br>'+ 'et un raton laveur</td></tr>', lf, pos('</TABLE>',lf)); liste1^[x]:=lf; end end; (* 1 for x=0 to n-1*) (* ici listea est à jour de tous les noms possibles, il est temps de filtrer les résultats pour savoir si un nom réapparait plusieures fois. *) for x:=1 to pntnom do begin nom:=listea^[x].anom; filtreliste(x); end; pntnom:=0; (* on nettoie par sécurité *) for x:=0 to n-1 do begin (* 1 *) (* on recupère la ligne dans un tampon de traitement *) lf:=liste1^[x]; extrait_nom(false); (* normalement pntnom pointe sur le bon nom dans listea et permet de récupérer le nombre d'image par page et le comparer à numimgmax *) if pos('A HREF="',lf)<>0 then begin (* 2 *) numimg:=numimgmax-listea^[pntnom].nimg+1; str(numimg,buf); insert(' colspan='+buf,lf,pos('</A></b></td>',lf)+16); (* numérote le nom *) str(pntnom,buf); insert('<td><a name="'+ buf+ '"></a><b>'+ buf+ '</b></td>', lf,pos('<tr>',lf)+4); if (listea^[pntnom].aprecedent<>0) then begin str(listea^[pntnom].aprecedent,buf); insert('<td><a HREF="#'+ buf+ '">Precedent</a></td>', lf, pos('<tr>',lf)+4); end else insert('<td> </td>', lf,pos('<tr>',lf)+4); if (listea^[pntnom].asuivant<>0) then begin str(listea^[pntnom].asuivant,buf); insert('<td><a HREF="#'+ buf+ '">Suivant</a></td>', lf, pos('</tr>',lf)); end else insert('<td> </td>', lf,pos('</tr>',lf)); liste1^[x]:=lf; end else if pos('<tr><td><br><b><h3>', lf)<>0 then begin (* 2 *) numimg:=numimgmax+5; str(numimg,buf); if (length(lf)+8+length(buf))<255 then begin insert(' colspan='+ buf, lf, pos('<tr><td><br><b><h3>', lf)+7); liste1^[x]:=lf; end else begin for nblgn:=x+1 to n-1 do liste2^[nblgn+1]:=liste1^[nblgn]; inc(n); liste1^[x+1]:=''; for nblgn:=x+1 to n-1 do liste1^[nblgn+1]:=liste2^[nblgn+1]; end; end else if pos('<TR><TD align=center><H2>',lf)<>0 then begin (* 2 *) numimg:=numimgmax+5; str(numimg,buf); insert(' colspan='+ buf,lf, pos('<TR><TD align=center><H2>', lf)+7); liste1^[x]:=lf; end; if pos('</H2></TD></TR>',lf)<>0 then begin (* 2 *) numimg:=numimgmax; str(numimg,buf); insert('<tr><td>autres'+ ' travaux</td><td>nø</td><td>nom'+ '</td><td colspan='+ buf+ '>nombre d'+ #39+ 'images</td><td>taille<'+ '/td><td>autres travaux<'+ '/td></tr>', lf, pos('</H2></TD></TR>',lf)+15); liste1^[x]:=lf; end; if pos('</TABLE>',lf)<>0 then begin (* 2 *) numimg:=numimgmax+5; str(numimg,buf); insert(' colspan='+buf,lf,pos('<tr><td>Occupation',lf)+8); liste1^[x]:=lf; end end; assign(f2,'basenw2.htm'); rewrite(f2); for x:=0 to n-1 do begin writeln(f2,liste1^[x]); end; close(f2); dispose(listea); dispose(liste2); dispose(liste1); end. |