Txt vers Html & Autres Demandes.

Fermé
Stephane25091978 Messages postés 16 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 28 mai 2020 - 28 mai 2020 à 21:54
jee pee Messages postés 39635 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 - 31 mai 2020 à 19:03
Bonjour ou bonsoir (Selon le moment où vous me lirez),

J'espère que ces quelques lignes vous trouveront en parfaite santé?

Ici Stéphane; quarante-et-un ans; aveugle de naissance; Webmaster de trois sites internet et d'un portail web (Tous dits "Par & Pour Déficients Visuels", entièrement encodés en Html brut, via le simple Bloc-notes de Windows!).

L'un d'eux, nommé "Monochrome Web", dispose de ce que j'appelle communément une "Monochrome CdDb"; c'est-à-dire, une sorte de petite base de données (En "Texte Brut"), grâce à laquelle les personnes aveugles peuvent, très aisément, consulter les titres et interprètes des diférents albums et compilations Cd audio qui y sont répertoriés. En effet, exécuter un scan une pochette de Cd / Dvd / Disques Vinyles est presqu'impossible, surtout s'il faut ensuite la traiter à l'"OCR".

Au jour d'aujourd'hui, plus de treize milles entrées y sont publiées. Mon problème est que les liens pointent tous vers des fichiers "Txt".

Or, j'aurais beaucoup aimé :

- Soit, convertir ces derniers (Si possible, par lot!) en "Html", de manière à davantage en faciliter l'accès et la consultation (Quitte à modifier, après conversion, certaines balises par du Remplacement de chaînes!).

- Soit, trouver un logiciel qui puisse me permettre de modifier (Si possible, toujours par lot!), tous les fichiers "Txt" d'un dossier comme suit :
  • Ajout d'une chaîne de caractères, en l'occurence "<li>", à chaque début de ligne;
  • Ajout d'une chaîne de caractères, en l'occurence "</li>", à chaque fin de ligne;
  • Insertion d'un bloc de texte (Plusieurs lignes) en début de fichiers;
  • Suppression des lignes vierges et / ou d'un nombre de lignes, prélablement définiees, en début et fin de fichiers.


Je peux utiliser, sans souci, des logiciels tels que :

- UltraEdit (D'"Idm-Software", pour lequel j'ai acquis une licence à vie!),

- Notepad Plus Plus (Version 7.8.),

- Et OpenOffice (Version 4.1.7!); peut-être qu'une macro de conversion et / ou de modification existerait???...

Dans l'attente et l'on ne peut plus vive espérance de recevoir une réponse favorable, ainsi qu'avec mes remerciements anticipés pour votre lecture et votre compréhension, je vous prie de bien vouloir agréer, Chers Tous, Chères Toutes, l'expression de mes salutations distinguées.

Très Cordialement,

Stéphane VINCENT
A voir également:

2 réponses

jee pee Messages postés 39635 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235
Modifié le 29 mai 2020 à 18:48
Bonjour,

Pour répondre à ta problématique, je ne connais pas de logiciel qui pourrait faire un tel traitement de fichiers.

Comme de nombreux intervenants du forum, informaticiens ou passionnés d'informatique, pour réaliser cela nous écririons un script de commande, voire un programme. Un .cmd sous Windows, un shell sous linux, ...

J'ai regardé pour un script sous Windows, mais la boucle de traitement des lignes d'un fichier omet les lignes vides.

Je voulais depuis quelque temps utiliser le langage Python, qui permet de faire à la fois des scripts et des programmes. Alors j'ai installé un environnement et j'ai réalisé un embryon de script pour traiter ces fichiers txt. J'en ai récupéré 3 sur ton site pour tester.

Là le script ne fait que rajouter les balises <li> et </li>.

import os
dir_orig="D:/Dev/@txt2html/fic/"
dir_dest="D:/Dev/@txt2html/fic/"
for file in os.listdir(dir_orig):
    if file.endswith(".txt"):
        ficin=os.path.join(dir_orig, file)
        ficout=os.path.join(dir_dest,os.path.splitext(file)[0]+'.html')
        print(ficin, ficout)
        with open(ficin, "r") as filin, open(ficout, "w") as filout:
            for line in filin:
                if line != "\n":
                    filout.write("{}".format("<li>"+line.rstrip()+"</li>\r"))


Si cette solution t’intéresse (il te faudrait installer Python), je peux étendre les fonctionnalités de ce script pour traiter les autres points.

Par exemple en tête, il faudrait insérer les balises de base d'un html, et en fin de fichier les fermer. Il pourrait y avoir un lien retour arrière, ou retour au menu. Les balises <li> devraient être englobées dans des balises <ul>. Pour les fichiers qui contiennent des coffrets, avec plusieurs CD ou DVD, il faudrait identifier les titres de chaque support pour ne pas mettre une puce (en fait une ligne seule entre 2 lignes blanches).

A noter que dans certains fichiers, il y a une numérotation redondante, qui sera encore amplifiée par les puces de liste.

1. Chapitre 1 : Les Rouges Ont Gagnés! 
2. Chapitre 2 : Les Meilleurs Ennemis Du Monde
3. Chapitre 3 : On Baptise Lénine


Cordialement
0
jee pee Messages postés 39635 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235
31 mai 2020 à 19:03
J'ai profité de l'occasion pour écrire mon premier script en Python. Comme je le pensais ce langage se prête bien au traitement d'un fichier texte.

Le résultat sur quelques fichiers, originaux et convertis :

Texte d'origine - Amy Winehouse : Back To Black
Fichier converti html - Amy Winehouse : Back To Black
Texte d'origine - Barry White : The Very Best Of Barry White (Coffret Trois Cd)
Fichier converti html - Barry White : The Very Best Of Barry White (Coffret Trois Cd)
Texte d'origine - Genesis * (1973) * Selling England By The Pound
Fichier converti html - Genesis * (1973) * Selling England By The Pound

Le script comporte des options dans le traitement des fichiers.

1/ Comme le rendu visuel n'est pas la conversion avec une lecture du texte par un logiciel, avoir des sauts de lignes pourrait être utile, voilà les 2 versions, avec et sans saut de ligne entre les blocs :

Fichier converti html - Amy Winehouse : Back To Black
Fichier converti html avec saut de ligne - Amy Winehouse : Back To Black
Fichier converti html - Barry White : The Very Best Of Barry White (Coffret Trois Cd)
Fichier convertihtml avec saut de ligne - Barry White : The Very Best Of Barry White (Coffret Trois Cd)

2/ Dans certains fichiers il y a un texte redondant numéro + numéro de chapitre, on peut corriger cette présentation :

Texte d'origine - Don Camillo - L'Intégrale (Coffret 8 Dvd)
Fichier converti html sans traitement - Don Camillo - L'Intégrale (Coffret 8 Dvd)
Fichier converti html suppression numéro - Don Camillo - L'Intégrale (Coffret 8 Dvd)
Fichier converti html suppression chapitre - Don Camillo - L'Intégrale (Coffret 8 Dvd)

Le script utilisé :

# txt2html - conversion fichier texte support médiathèque en html
import os,re

dir_orig="D:/Dev/Python/Exe/txt2html/fic/"  # repertoire des fichiers origine txt
dir_dest="D:/Dev/Python/Exe/txt2html/fic/"  # repertoire des nouveaux fichiers html
plus_br=False                               # ajout ou pas saut de ligne (True ou False)

def trait_ligne(nligne):                    # retraitement ligne redondance numero
    trait_type=1                            # supprimer 0=rien, 1=n°, 2=Chapitre
    if re.search(" Chapitre [0-9][0-9]* : ", nligne):
        if trait_type == 2:
            nligne=re.sub(r" Chapitre [0-9][0-9]* : ", r" ", nligne)
        elif trait_type == 1:
            nligne=re.sub(r"^[0-9][0-9]*. ", r"", nligne)
    return(nligne)

for file in os.listdir(dir_orig):           # boucle sur liste des fichiers
    if file.endswith(".txt"):
        ficin=dir_orig + file
        ficout=dir_dest + os.path.splitext(file)[0] + ".html"
        entete=False
        puce=False
        vide=False
        sligne=""
        with open(ficin, "r") as filin, open(ficout, "w") as filout:
            for ligne in filin:             # boucle sur lignes d'un fichier
                ligne=ligne.rstrip()
                if ligne != "":
                    if not entete:          # entete du html
                        filout.write("{}\r".format("<!doctype html>"))
                        filout.write("{}\r".format("<html>"))
                        filout.write("{}\r".format("<head>"))
                        filout.write("{}\r".format("  <title>" + ligne + "</title>"))
                        filout.write("{}\r".format("</head>"))
                        filout.write("{}\r".format("<body>"))
                        filout.write("{}\r".format("<h3>" + ligne + "</h3>"))
                        entete=True
                        vide=False
                    elif puce:
                        filout.write("{}\r".format("<li>" + trait_ligne(ligne) + "</li>"))
                    elif vide:
                        sligne=ligne
                        vide=False
                    else:
                        if plus_br:
                            filout.write("{}\r".format("<br>"))
                        filout.write("{}\r".format("<ul>"))
                        if sligne != "":
                            filout.write("{}\r".format("<li>" + trait_ligne(sligne) + "</li>"))
                            sligne=""
                        filout.write("{}\r".format("<li>" + trait_ligne(ligne) + "</li>"))
                        puce=True
                else:
                    if puce:
                        filout.write("{}\r".format("</ul>"))
                        puce=False
                    if sligne != "":
                        if plus_br:
                            filout.write("{}\r".format("<br>"))
                        filout.write("{}\r".format("<h4>" + trait_ligne(sligne) + "</h4>"))
                        sligne=""                    
                    vide=True
            if puce:
                filout.write("{}\r".format("</ul>"))
                puce=False
            # fin page html
            filout.write("{}\r".format("<br><a href=\"javascript:history.back()\">Page Précédente</a>"))
            filout.write("{}\r".format("</body>"))
            filout.write("{}\r".format("</html>")) 

0