Page 1 sur 1

[PROG] Recherche logiciel de modification automatisée de fichiers textes

Posté : mar. 05 déc. 2017, 14:11
par Luren
Quelqu'un connaît-il un logiciel qui permettrait d'ajouter/modifier automatiquement des lignes à un fichier de type texte. J'utilise Search & Replace mais je n'arrive qu'à lui faire rechercher/remplacer des tronçons de texte. Or là, il s'agirait d'ajouter une ligne basée sur une ligne existante, puis de la modifier partiellement.
Exemple concret :
map_Kd ../texture/wood.dds

Il s'agirait de dupliquer cette ligne pour avoir :

map_Kd ../texture/wood.dds
map_bump -bm 0.5000 ../texture/wood_n.dds

Un logiciel comme Search & Replace me permet par exemple de remplacer map_Kd par map_bump -bm 0.5000 et .dds par _n.dds mais je n'arrive pas à lui faire copier/modifier une ligne donnée.

... et comme je dois faire l'opération plusieurs centaines de fois, je me disais qu'une procédure automatisée, ce serait plutôt pas mal...

merci !

Posté : mar. 05 déc. 2017, 17:39
par Freddy_Gwendo
Question stupide : as-tu essayé avec WeiDU ? Il gère très bien l'ajout de lignes en fin de fichier (APPEND) et le remplacement de ligne par une ou plusieurs autres (en utilisant les variables %LNL%, %WNL%)

Posté : mar. 05 déc. 2017, 23:59
par Isaya
Ce serait peut-être possible avec notepad++ en utilisant une expression régulière mais il faudrait d'autres exemples de texte d'origine et de ligne à ajouter afin de déterminer un pattern à introduire sous forme d'expression. Se pose aussi la question du texte à insérer dans la copie et qui nécessiterait d'être toujours identique.

Exemple avec le seul élément connu : remplacer
(map_)(Kd) (..\/texture\/wood)(\.dds)
par
\1\2 \3\4\n\1bump -bm 0.5000 \3_n\4
en cochant le bouton radio "Expression régulière" dans la fenêtre de remplacement.

Les séquences \1, \2, etc. font référence au numéro de bloc de texte mis entre parenthèse dans la recherche. On peut donc à l'envie les utiliser ou les ignorer dans le texte de remplacement.
La difficulté réside dans la généricité qu'il faudra introduire dans au moins les trois premiers textes entre parenthèses (on peut imaginer que .dds ne variera pas, mais cela reste à voir) pour que cela traite toutes les lignes qui t'intéressent.
Même si ce processus pourrait parfaitement s'automatiser (Remplacer tout), il te vaudra mieux les valider un par un en vérifiant que l'expression régulière aura bien attrapé le "bon" texte (notepad++ surligne le texte trouvé).

Posté : ven. 08 déc. 2017, 16:37
par Luren
Merci de vos réponses !

@Freddy : J'ignorais que l'on pouvais utiliser Weidu comme une application indépendante, et je n'ai pas de connaissances suffisantes pour lui faire faire ce que je voudrais qu'il fasse...difficile donc pour moi de mettre en pratique ton idée. :$

@Isaya. Merci des pistes que tu me donnes. J'utilise notepad++ et j'utilise souvent sa fonction de recherche/remplacement, mais pas avec les expressions régulières. Je vais creuser la question.
Pour ce que je veux faire, les infos que tu me communiques correspondent parfaitement aux textes à rechercher remplacer. Le truc sur lequel je bute, c'est la duplication automatisée d'une ligne. Pour reprendre l'exemple que j'ai donné, il s'agit d'ajouter une ligne avec de nouvelles entrées, mais comme j'obtiens par duplication 2 lignes identiques, il est nécessaire d'ajouter un marqueur ou de modifier à la volée la ligne que je duplique, afin que lors de l'opération de recherche/remplacement seule un ligne sur les deux soit modifiée.

Ci-dessous un exemple d'un fichier .mtl avant/après modification
► Afficher le texte
Ce type de fichier accompagne les fichiers .obj, et contient les paramètres (basiques) des matériaux associés à des modèles 3D. Dans mon exemple je souhaite simplement ajouter, pour chaque matériau, une ligne correspondant aux fichiers bump servant à donner un effet de relief à une texture. Pour ne pas se mélanger les pinceaux, les fichiers ont la même dénomination que les textures, avec juste le _n (n pour normal). J'indique aussi une valeur (-bm 0.5000) correspondant à l'intensité de l'effet de relief.
Edit : Ah oui, et la ligne KS 0.000000 0.000000 0.000000, correspond à la modification d'un effet lumineux associé à la texture.

Posté : sam. 09 déc. 2017, 16:13
par Luren
J'ai trouvé la réponse !

Avec Notepad++ :
Recherche :
map_Kd\s+(\S+)\.dds
ou
(map_)(Kd)(\s+\S+)(\.dds)
Remplacer par :
map_Kd \1.dds\nmap_bump -bm 0.4000 \1_n.dds
ou
\1\2\3\4\n\1bump -bm 0.4000\3_n\4
Le truc, c'est qu'au lieu d'ajouter une ligne, on la remplace par deux lignes. Une qui recopie l'originale (map_Kd \1.dds), suivie d'un retour à la ligne (\n) puis de l'écriture de la seconde ligne (map_bump -bm 0.4000 \1_n.dds)
Le répertoire (comme ../texture/wood.dds de l'exemple), qui peut être variable, par le nom de la texture et son emplacement, est repéré lors de la recherche par \s+(\S+) , c'est à dire un espace (\s) de longueur variable (+) suivi d'un non espace (\S), c'est à dire des caractères, de longueur variable (+). Sa mise entre parenthèse permet de l'appeler lors du remplacement (via \1)


Merci Isaya