précédant | suivant | sommaire perl | sommaire gnl


faq2html.pl

transformera vos rapport style faq (avec des numero) pour en faire un fichier.html qui regroupera les titres et sous titres et les rendra interatifs c'est à dire en fera des liens. Trouver plus bas trois versions 1.0, 1.2, 1.3 (la plus a jour)


Ce prog n'est pas terminé, mais ce n'est pas plus mal car on peut ce l'arranger à sa guise. alain Adelmar Mais trouver au dessous la version la plus avancé qui fonctionne déjà pas mal.
En mettant de la couleur les blancs on disparrus je m'en occupe dés que j'ai un moment. (deusiéme version plus récente, et en bas la der : ici )


#!perl -w
# remd: transformer un texte avec des chapitres numeroté en fichier html avec des liens (pour env MS ) - alain Adelmar 20 fév 2001.
# initialisation:
$id=0;
$x="x"x25;

# mettre en variable les incontournables___
$p_s_s='<A HREF="liste_des_pages_h.html">pr&eacute;c&eacute;dant</A> | <A HREF="lien_ici">suivant</A> | <A HREF="index.html">sommaire</A>';
$li='<LI>';
$lblhtm='<HTML>';
$lblhtmo='</HTML>';
$ul='<UL>';
$b_in='<LI>';
$b_out='</A></H3>'."\n";
$ancreH3='<H3><A NAME="'."$numbrut"."\>";

LABEL_TOP:print"Entrez le nom du fichier à traiter:\n";
chomp($file=<STDIN>);

# sortir le path du filename
$road66=$filename=$file;
$road66=~s/()\\\w+\.\w{3,4}$/$1/i;
$filename=~s/^.+\\\b()/$1/;
 

if(-e$file){
$df=localtime(-C$file);
$crt="$x\n Rapport du contenu de $file : $df \n";
print"$crt"
}
else{
print"Erreur, le fichier $file n\'existe pas\n";
gotoLABEL_TOP;
}

# lit le fichier et met son contenu dans une variable liste
openF,"$file"ordie"Ouverture de $file impossible $!";
@contenu=<F>;
closeFordie"Fermeture impossible: $file $!";

# fait une copie pour pouvoir travailler sans faire de dégas (la copie doit avoir un nom propre et/ou un numero particulier)
$copieID="copie de $file"."_$id"."\.html";
($copie,$ext)=split(/\./,$copieID);
($lbl,$id)=split(/_/,$copie);

while(-edonne_un_nom($copieID)){
$id++;
donne_un_nom($copieID);
}

openCOPF,">$copieID"ordie"Ouverture de $copieID impossible: $!";
printCOPF$lblhtm;
printCOPF@contenu;
printCOPF$lblhtmo;
closeCOPFordie"Re_merde c\'est quoi encore $!";

# definir le fichier tmp
$filetmp='C:\Temp\log.html';
openCT,">$filetmp"ordie"Ouverture de $filetmp impossible $!";
printCOPF$lblhtm;
foreach$line(@contenu){
nextif($line=~/^</);
if($line=~/^sommaire\s/i){
$line='<title>'."$line".'</title>';
}
elsif($line=~/^\d{1,2}\.\d{1,2}\s/){
$lignetitre=$line;# au cas  ou pourra remplacer la merde plus bas
($numbrut,$ttchap)=split(/\s/,$line,1);
($nump,$nums)=split(/\./,$numbrut);
$i++;#numero me servant au classement
if($nums<=0){
$tt_actif="$li$ancreH3$nump\.$nums\t$ttchap$b_out";
printCT$tt_actif;
push@nwcontenu,$tt_actif;
next;
}
else{
$tt_actift="$li\t$ancre$nump\.$nums\t$ttchap$b_out\n";
printCT$tt_actift;
push@nwcontenu,$tt_actift;
next;
}
}
push@nwcontenu,$line;
}

printCT"\n\n";
printCT@nwcontenu;
printCT$lblhtmo;
closeCTordie"ca couince avec le temporaire $!";
 

# routine pour donner un nom qui ne detruira pas les autres copies ou l'original
subdonne_un_nom($copieID){
my($copieID)=@_;

$copieID="copie de $file"."_$id"."\.log";
($copie,$ext)=split(/\./,$copieID);
($lbl,$id)=split(/_/,$copie);
return$copieID;
}

END;

ou
#============================= version plus récente (ou tout au moins plus utilisable)
#!/usr/bin/perl -w
# remd: transformer un texte avec des chapitres numeroté en fichier
# html avec des liens (pour Linux ) - alain Adelmar 18.03.2001.
# initialisation:
$id = 0;
$x = "x" x 25;

# mettre en variable les incontournables___
$p_s_s = '<A HREF="liste_des_pages_h.html">pr&eacute;c&eacute;dant</A> | <A HREF="liste_des_pages_h.html">suivant</A> | <A HREF="index.html">sommaire</A>';
$li = '<LI>';
$lblhtm = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">' . "\n" . '<HTML>';

$lblhtmo = '</HTML>';
$h_ref = '<H REF="' . "s" . "$numbrut" . '">' . "$line" . '</H></H3>' . "\n";
$ancre_in = '<H3><A NAME="' . "s" . "$numbrut" . "\><\/A\>";
 

LABEL_TOP:print "Entrez le nom du fichier à traiter:\n";
chomp($file = <STDIN>);

# sortir le path du filename
$road66 = $filename = $file;
$road66 =~ s/()\/\w+\.\w{3,4}$/$1/i;
$filename =~ s/^.+\/\b()/$1/;
 

if (-e $file) {
  $df = localtime(-C $file);
  $crt = "$x\n Rapport du contenu de $file : $df \n";
  print "$crt"
}
else {
  print "Erreur, le fichier $file n\'existe pas\n";
  goto LABEL_TOP;
}

# lit le fichier et met son contenu dans une variable liste
open F, "$file" or die "Ouverture de $file impossible $!";
@contenu = <F>;
close F or die "Fermeture impossible: $file $!";

# fait une copie pour pouvoir travailler sans faire de dégas (la copie doit avoir un nom propre et/ou un numero particulier)
$copieID = "copie_" . "$file" . "_$id" . "\.html";
($copie, $ext) = split(/\./, $copieID);
($lbl, $id) = split(/_/, $copie);

while (-e donne_un_nom($copieID)) {
  $id++;
  donne_un_nom($copieID);
}

open COPF, ">$copieID" or die "Ouverture de $copieID impossible: $!";
print COPF $lblhtm;
print COPF @contenu;
print COPF $lblhtmo;
close COPF or die "Re_merde c\'est quoi encore $!";

# definir le fichier tmp en lui donnant un nom, un num et un rep (/tmp/tmp/):
($copie, $ext) = split(/\./, $copieID);
($lbl, $id) = split(/_/, $copie);

while (-e donne_un_nom($copieID)) {
  $id++;
  donne_un_nom($copieID);
}
$filetmp = '/tmp/tmp/' . "$copieID";

open CT, ">$filetmp" or die "Ouverture de $filetmp impossible $!";
print COPF $lblhtm;
foreach $line(@contenu) {
  next if ($line =~ /^</);
  if ($line =~ /^sommaire\s/i) {
    $line = '<h1><title>' . "$line" . '</h1></title>';
  }
  elsif ($line=~ /^\d{1,2}\.\d{1,2}\s/) {
    $lignetitre = $line; # au cas  ou pourra remplacer la merde plus bas
    ($numbrut, $ttchap) = split(/\s/, $line, 1);
    ($nump, $nums)= split(/\./, $numbrut);
    $i++; #numero me servant au classement
    if ($nums<=0) {
      $tt_actif_tab = "$li" . '<H3><A NAME="' . "tab_" . "$nump" . '"></A><H REF="' . "s_" . "$nump" . '">' . "$line" . '</H></H3>' . "\n";
      $tt_actif_s = "$li" . '<H3><A NAME="' . "s_" . "$nump" . '"></A><H REF="' . "tab_" . "$nump" . '">' . "$line" . '</H></H3>' . "\n";
      print CT $tt_actif_tab;
      push @nwcontenu, $tt_actif_s;
      next;
    }
    else {
      $tt_actift_tab = "$li\t" . '<H3><A NAME="' . "tab_" . "$nump" . "$nums" . '"></A><H REF="' . "s_" . "$nump" . "$nums" . '">' . "$line" . '</H></H3>' . "\n";
      $tt_actift_s = "$li" . '<H3><A NAME="' . "s_" . "$nump" . "$nums" . '"></A><H REF="' . "tab_" . "$nump" . "$nums" . '">' . "$line" . '</H></H3>' . "\n";
      print CT $tt_actift_tab;
      push @nwcontenu, $tt_actift_s;
      next;
    }
  }
  else {
    push @nwcontenu, $line;
  }
}

print CT "\n\n";
print CT @nwcontenu;
print CT $lblhtmo;
close CT or die "ca couince avec le temporaire $!";
 

# routine pour donner un nom qui ne detruira pas les autres copies ou l'original
sub donne_un_nom($copieID) {
  my ($copieID) = @_;

  $copieID = "copie_" . "$file" . "_$id" . "\.log";
  ($copie, $ext) = split(/\./, $copieID);
  ($lbl, $id) = split(/_/, $copie);
  return $copieID;
}

END;



retour en haut de page

Troiséme et dérniére version (pas la finale mais fonctionne) le script en normal ici

#!/usr/bin/perl -w
# remd: transformer un texte avec des chapitres numeroté en fichier html  *
# avec des liens (pour Linux ) - alain Adelmar 18.03.2001~ 11.12.2003 v2.2*
# -idée possible de traiter le mail => HTML (objet=titre dynamiques)      *
#**************************************************************************
# $ID$
# voir le nom de fichier pour les liens entre XWindow et copie_xwind
use Cwd;

$dir = cwd;

$id = 0;
$x = "x" x 25;

#traiter les options & arguments ----
while (@ARGV) {
  
if ($ARGV =~ /^-/) {
    

# mettre en variable les incontournables___
$p_s_s = '<A HREF="lien_ici">pr&eacute;c&eacute;dant</A> | <A HREF="lien_ici">suivant</A> | <A HREF="index.html">sommaire</A>';
$li = '<LI>';
$lblhtm = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">' . "\n" . '<HTML>';

$lblhtmo = '</HTML>';
$h_ref = '<H REF="' . "s" . "$numbrut" . '">' . "$line" . '</H></H3>' . "\n"; 
$ancre_in = '<H3><A NAME="' . "s" . "$numbrut" . "\><\/A\>";

# si utilisateur n'a pas demandé de nom de fichier en arguments 
LABEL_TOP:print "Entrez le nom du fichier à traiter:\n";
chomp($file = <STDIN>);

#------- format de date pour file (normal = aaammjj | complet = aaammjj:%%%)

@lsjour = qw(
        Dimanche
        Lundi
        Mardi
        Mercredi
        Jeudi
        Vendredi
        Samedi
        )
;

for $i(0 ..6) {
  
$fj{$i} = $lsjour[$i];
}

$min =(localtime(time()))[1];
$h =(localtime(time()))[2];
$an =(localtime(time()))[5];
$sjour =(localtime(time()))[6];
$fjour = $fj{$sjour};
$datos = localtime (time);
@lstnow = localtime (time());
$j = $lstnow[3];
$m = $lstnow[4]+1;
if ($min <= 9) {
  
$min = "0" . $min;
}
if ($h <= 9) {
  
$h= "0" . $h;
}
if ($j <= 9) {
  
$j= "0" . $j;
}
if ($m <= 9) {
  
$m = "0" . $m;
}
if ($an >= 100) {
  
$an=~ s/1()/20/;
}
else {
  
$an= "1" . $an;
}
#----------- pour centieme de journée exp: 25 = 25% de journée ou 25 quart d'heures (99 = 1440min = 24h)
$tmp_h2m = ($h * 60) + $min;

# ---- pour $qdh (quantité de jour exprimé de 01~99) ------
$qdh = int ($tmp_h2m/14.5); # pour avoir le centieme de journée sur 2chiffres de 01 à 99
if ($qdh <= 9) {
  
$qdh = "0" . "$qdh";
}

# ---------- pour $qdh (quantité de jour exprimé de 01~99) ------- uncomment

if ($qdh <= 9) {
  
$qdh = "0" . "$qdh";
}
# ---------- pour $qdm (quantité de jour exprimé de 001~999)------ 

$qdm = int ($tmp_h2m/1.44); # pour avoir le milliéme de journée sur 3chiffres de 1 à 999
if ($qdm <= 9) {
  
$qdm = "00" . "$qdm";
}
elsif ($qdm <= 99) {
  
$qdm = "0" . "$qdm";
}

#---------------------------------------------------------------------------------
$ma_date_v = "$fjour  $j\/" . "$m\/" . "$an" . ":" . "$h" . ":$min"; # Mercredi 30/07/2003 17:30
$ma_date = "$an" . "$m" . "$j" . ":" . "$qdh";                       # 20030730:72
$ma_date_h = "$an" . "$m" . "$j" . ":" . "$qdm";                       # 20030730:726
$dt = $ma_date_v;

#print "ma_date = $ma_date | ma_date_v = $ma_date_v | qdh = $qdh | dt = $dt\n";

&verifj;


# sortir le path du fichier ouvert
@rep = split(/\//, $file);
$filename = pop @rep;           # nom du fichier seul
$rep = join('/', @rep);   # rep de travail
#------------------------------------

if (-e $file) {
  
@statfilename = stat($file); 
  
$df = localtime($statfilename[8]);
  
$crt = "$x\n Rapport du contenu de $file : $df \n";
  
print "$crt";
}
else {
  
print "Erreur, le fichier $file n\'existe pas\n";
  
goto LABEL_TOP;
}

# lit le fichier et met son contenu dans une variable liste
open F, "$file" or die "Ouverture de $file impossible $!";
@contenu = <F>;
close F or die "Fermeture impossible: $file $!";

# fait une copie pour pouvoir travailler sans faire de dégas (la copie doit avoir un nom propre et/ou un numero particulier)
$copieID = "copie_" . "$filename" . "_$id" . "\.html";
$full_copieID ="$rep" . "\/" . "$copieID"; 
#($copie, $ext) = split(/\./, $copieID);
#($lbl, $id) = split(/_/, $copie);

while (-e $full_copieID) {
  
#$id++;
  
donne_un_nom($copieID);
  
$copieID = "copie_" . "$copieID";
  
$full_copieID ="$rep" . "\/" . "$copieID"; 
}

open COPF, ">$copieID" or die "Ouverture de $copieID impossible: $!";
print COPF $lblhtm;
print COPF @contenu;
print COPF $lblhtmo;
close COPF or die "Re_merde c\'est quoi encore $!";

# definir le fichier tmp en lui donnant un nom, un num et un rep (/tmp/tmp/):
($filetmp, $ext) = split(/\./, $filename);
#($lbl, $id) = split(/_/, $filetmp);
$ftmp = "$filetmp" . "\.html";
$fulltmp = "$rep" . "\/" . "$ftmp";

while (-e $fulltmp) {
#  $id++;
  
donne_un_nom($ftmp);
  
$fulltmp = "$rep" . "\/" . "$ftmp";
}
$tmpdir = "\./tmp";
if (!(-d $tmpdir)) {
  
mkdir $tmpdir;
}

$filetmp = "$tmpdir" . "\/" . "$copieID";



open CT, ">$filetmp" or die "Ouverture de $filetmp impossible $!";
print CT $lblhtm;
foreach $line(@contenu) {
  
next if ($line =~ /^</);
  
if ($line =~ /^sommaire\s/i) {
    
$line = '<h1><title>' . "$line" . '</h1></title>';
  
}
  
elsif ($line=~ /^\d{1,2}\.\d{1,2}\s/) {
    
$lignetitre = $line;   # au cas  ou pourra remplacer la merde plus bas
    
($numbrut, $ttchap) = split(/\s/, $line, 1);
    
($nump, $nums)= split(/\./, $numbrut);
    
$i++;   #numero me servant au classement
    
if ($nums ne 0) {
      
$tt_actif_tab = "$li" . '<H3><A NAME="' . "tab_" . "$nump" . '"></A><A HREF="' . "\.\/$ftmp" . "#s_" . "$nump" . '">' . "$line" . '</A></H3>' . "\n";
      
$tt_actif_s = "$li" . '<H3><A NAME="' . "s_" . "$nump" . '"></A><A HREF="' . "\.\/$ftmp" . "#tab_" . "$nump" . '">' . "$line" . '</A></H3>' . "\n";             
      
print CT $tt_actif_tab;
      
push @nwcontenu, $tt_actif_s;
      
next;
    
}
    
else {
      
$tt_actift_tab = "$li\t" . '<H3><A NAME="' . "tab_" . "$nump" . "$nums" . '"></A><A HREF="' . "\.\/$ftmp" . "#s_" . "$nump" . "$nums" . '">' . "$line" . '</A></H3>' . "\n";
      
$tt_actift_s = "$li" . '<H3><A NAME="' . "s_" . "$nump" . "$nums" . '"></A><A HREF="' . "\.\/$ftmp" . "#tab_" . "$nump" . "$nums" . '">' . "$line" . '</A></H3>' . "\n";
      
print CT $tt_actift_tab;
      
push @nwcontenu, $tt_actift_s;
      
next;
    
}  
  
}
  
else {
    
push @nwcontenu, $line;
  
}
}

print CT "\n\n";
print CT @nwcontenu;
print CT $lblhtmo;
close CT or die "ca couince avec le temporaire $!";


# routine pour donner un nom qui ne detruira pas les autres copies ou l'original
sub donne_un_nom($copieID) {
  
my ($copieID) = @_;
  
  
$id++;
  
$copieID = "$filename" . "_$id" . "\.html";
  
#($copie, $ext) = split(/\./, $copieID);
#  ($lbl, $id) = split(/_/, $copie);
  
return $copieID;
}

END;



# précédant | suivant | sommaire perl | sommaire gnl  | haut de la page