[R] _ReplaceStringInFile pour fichier à extension non conventionnelle

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

[R] _ReplaceStringInFile pour fichier à extension non conventionnelle

#1

Message par JulienBoul »

Bonjour,

Je cherche à modifier la configuration de l'impression d'un pdf.

Pour cela, je cherche à remplacer des données présentes dans le fichier temporaire de l'impression (lorsque la fenêtre "imprimer" de windows est ouverte).

Ainsi, je remplacerai la chaine "xxx" par la chaine "" (du vide), dans le fichier suivant: test.1

J'ai donc fait le choix logique (à mon sens) d'utiliser _ReplaceStringInFile (qui nécessite "#include <File.au3> ; pour _ReplaceStringInFile") en début de code.

Est il possible d'utiliser cette fonction sur un fichier dont le suffixe est non conventionnel? Faut il passer par un FileCopy pour renommer en *.txt?
Sachant que mon fichier fait à peu près 10000 Lignes, _ReplaceStringInFile est elle la fonction la plus adaptée (rapport fiabilité/temps d'exécution)?

Pour le moment, je passe de xxx.1 à xxx.txt pour modifier la chaine de caractère (présente plusieurs fois dans le code du document temporaire) et ensuite je repasse en xxx.pdf pour lecture du fichier pdf modifié.

Cela vous semble-t-il cohérent ? Pour le moment, rien à faire, ça ne fonctionne pas (pb de temps d'execution de la fonction? de chemin d'accès mal écrit? de droits en écriture? de fichier déjà ouvert quelque part? Je vérifie actuellement), d'ou ma question. Dès que résolu, je mettrai le code pour ceux que ça intéresserait.

Au plaisir de vous lire.
Julien.

Edit: Je suis d'abord parti sur la piste de la longueur de fichier(txt) à analyser mais celle ci n'importe pas.
En réalité, je dois ouvrir le fichier xxx.txt et l'enregistrer pour que mon code fonctionne, un peu comme si il était corrompu... Ca n'enlève rien à ma volonté de vouloir travailler directement sur un fichier *.1 afin de simplifier le code si possible. Voilà, si ça parle a quelqu'un ce soucis, je continue à creuser de mon coté.
Voici mon code actuel.
#include <File.au3> ; pour _ReplaceStringInFile
_ReplaceStringInFile(@UserProfileDir&"\AppData\Local\Temp\dossier\xxx.txt", "string1 ", " ")  ; suppression de la chaine sans faire sauter la ligne en laissant un espace sur la ligne
_ReplaceStringInFile(@UserProfileDir&"\AppData\Local\Temp\dossier\xxx.txt", "string2 ", " ")
_ReplaceStringInFile(@UserProfileDir&"\AppData\Local\Temp\dossier\xxx.txt", "(string3 ", " ")
Modifié en dernier par JulienBoul le jeu. 24 nov. 2016 16:35, modifié 1 fois.
amphase
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mar. 30 août 2016 00:28
Status : Hors ligne

Re: [..] _ReplaceStringInFile pour fichier à extension non conventionnelle

#2

Message par amphase »

Ave Julien !

S’il te faut retenir quelque chose du sujet précédent, c’est qu’à partir du moment où tu as fourni des éléments concrets, la situation s’est débloquée.

Si certains profs de math t’ont dit qu’une bonne compréhension de l’énoncé résout la moitié du problème, c’est parce qu’ils ont considéré comme peu académique (laissons les palmes au calme) de dire que sans ça, autant aller te faire brosser chez les canards grecs (ou romains) ou te mettre une banane dans l’oreille (avec la liberté de choix en ce qui concerne la provenance de la banane). :lol:
Je me suis déjà exprimé sur ce forum ici et (je te recommande ces lectures) sur possibilité de se créer un surcroît de travail improductif par une vérification négligée de la fiabilité des données entrantes. Mais il est vrai qu’il en résulte un bénéfice secondaire, celui de pouvoir se plaindre d’être débordé. Pour ma part, je préfère passer pour un obsédé de la méthodologie scientifique. Alors, comme on dit dans la moustache, reprenons tout depuis le début.

Pour la résolution de problèmes, une approche (un tout petit-petit peu à peine) systémique te permettra de mieux voir où tu mets les roues, en compensant (ce mot serait-il paradoxal ?) ta tendance à l’éjaculation intellectuelle précoce, :shock: ta propension à mettre la trayeuse avant la vache (parité oblige). C’est ainsi que tu as découvert qu’il s’agissait de références internes seulement après avoir importé les fichiers.

Voici une approche personnelle qui ne prétend aucunement être autre chose que cela. Parlons donc des préliminaires anti-flops :) : pour ce faire, prépare dès à présent une note de frais pour quelques feuilles de papier et un crayon avec gomme au bout (ça t’évitera de la chercher) ; équipé de ces fantastiques outils, tu vas pouvoir tracer trois colonnes. Dans la première, inscris toutes les données dont tu peux disposer. Dans la troisième, celles que tu veux obtenir (résultats). Dans la deuxième, les outils, les moyens dont tu disposes ou qu’il te faudra acquérir pour passer de la une à la trois. Fais cela sans aucune censure, un genre de brainstorming à toi tout seul (c’est plus productif en groupe parce que l’idée de l’un, par association, va générer des idées chez les autres et recto verso), mets-y tout qui te passe par la tête. Ensuite vient l’étape du tri : tous les mots qui figurent dans ce tableau doivent être dénotés, c'est-à-dire concrets ; tu dois pouvoir les mettre dans ta brouette. S’ils sont connotés, réduis-les (mais non, pas en cendres) en questionnant selon l’exemple suivant (puisque l’on parle de trier) :

Il me faut une fonction adéquate. – Que doit faire cette fonction pour être adéquate ? - Elle doit trier les données du tableau A par ordre alphabétique. – De quelles méthodes de tri puis-je disposer ? - Je connais le tri à bulles (décoincées), le Shell-Metzner et celui par insertion : mais, il y a tout un tas d’autres algorithmes que je ne connais pas – Quels sont mes critères de choix ? - La compatibilité avec AutoIt, le temps que je vais y passer, la rapidité et la fiabilité de l’algorithme. – Comme AutoIt est compatible avec presque tout, quel est le temps qui m’est nécessaire pour étudier les autres méthodes de tri ? - Waouuuhh ! - Mère-grand et chaperon rouge n’étant pas des algos de tri, question suivante. - Shell est rapide, mais instable. Insertion et bulles sont lents mais fiables. – La fiabilité est essentielle ici - Insertion est le plus efficace des deux et j’ai même des exemples écrits en AutoIt sur le forum. – Je retiens le tri par insertion. - Coder l’algo de tri par insertion. - J’ai le choix entre l’utilisation de SQL et celle de Scripting.Dictionary. – Sur quels critères déterminer… et ainsi de suite.
Si cette méthode n’éradique pas totalement les mauvaises surprises à l’arrivée, elle a l’avantage de largement les limiter.

En ce qui concerne l’utilisation de _ReplaceStringInFile, saches que les données du spooler transitent par la RAM (forcément) avant d’être écrites sur le disque dur. Le temps d’accès se mesure en nanosecondes pour la RAM et en millisecondes pour le disque ; soit un rapport de 1 000, ce qui n’est pas rien. Quand tu as le choix, privilégie l’utilisation de variables, sauf si tu crains qu’EDF ne te coupe le gaz, car RAM se dit mémoire volatile = cervelle d’oiseau. À propos d’oiseau, non volatile celui la, entre orax et moi-même, tu as eu du poulet cuit, il ne te restait plus qu’à le découper, mais comme tu es ici pour apprendre à le cuisiner, aujourd’hui, c’est poulet cru (poil aux dents). Y-a-t-il un bogue en rapport avec la moustache ? :lol:

Enfin, tu dis que j’ai ‘une elle écriture’, c’est peut-être parce que je me relis avant de poster. Malgré cela, en lisant ta réponse, j’ai remarqué que la dernière ligne (35) de mon script comportait une erreur : il faut lire UBound($aNom_Vues) – 1, mais comme ça n'influence pas le fonctionnement du programme... Nobody is ferpect !

Relecture, papier, crayon et brouette, voilà ton indispensable équipement. La suite viendra aisément.
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] _ReplaceStringInFile pour fichier à extension non conventionnelle

#3

Message par JulienBoul »

Quand le sage montre le ciel, l'imbécile regarde le doigt.
...Curieusement, je me surprend, bouche bée, les yeux posés sur le doigt de Confucius.

Je vais passer outre les suppositions concernant les éventuelles bananes, canards, précocités, trayeuses, et autres facultés à faire croire aux autres que je suis débordé, et me concentrer sur la méthodologie que tu tentes de m'apprendre avec beaucoup d'exemples à la clé.

J'ai tenté d'illustrer ta méthodologie, que je te permet d'utiliser comme bon te semble, de façon à aider les débutants comme moi à structurer leurs pensées, certes créatives, mais en effet un peu trop dispersées. Afin de m'éviter une note de frais, qui aurait du mal à passer, je me propose de numériser cela à l'aide d'un logiciel d'usage libre ;-)
methodo systemique probleme.png
methodo systemique probleme.png (9.75 Kio) Vu 1152 fois
Tu me parles de précision (avec le bel exemple des profs de math), mais malheureusement sur cet exemple, je ne pourrais pas fournir de fichier test, il est rempli de données pro, et je risquerai de les diffuser sans y être autorisé.
Je cherche à supprimer un objet d'un fichier pdf me permettant d'enlever le masque "image" d'un pdf, empêchant de le copier-coller et d'en extraire les données.
Concernant mon choix d'utiliser _ReplaceStringInFile, tu sembles indiquer qu'elle n'est pas la solution adaptée? Pour ma part, j'ai l'impression d'obtenir un résultat plutôt rapide, mais une fois seulement que j'ai réenregistré mon fichier txt. Je me répété, lorsque j'utilise filecopy, je suis obligé d'ouvrir mon fichier txt, l'enregistrer et après cette manip seulement, ma recherche peut être effectuée via _ReplaceStringInFile justement... Je bloque bien sur ce point, c'est un peu comme si mon fichier txt était corrompu avant de l'enregistrer manuellement et de rétablir, par là même, son intégrité.
Faut-il abandonner cette fonction?
Je cherche la fiabilité avant la rapidité sur ce code, sachant que je peux faire tourner mon PC un week end nuit et jour si besoin.
Pouvez-vous m'aiguiller sur une autre fonction ou m'indiquer pourquoi je n’arrive pas à lire mon fichier txt en première instance?

Julien.
amphase
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mar. 30 août 2016 00:28
Status : Hors ligne

Re: [..] _ReplaceStringInFile pour fichier à extension non conventionnelle

#4

Message par amphase »

Ma pédagogie serait-elle en perte de vitesse pour n’avoir reçu en retour qu’un tableau vierge ? En tout cas, merci de me l’avoir dédié, car il est vrai que ça fait tellement longtemps que je ne me suis pas mis quoi que ce soit de vierge sous la dent qu’il se peut que je confonde la laine fraîche et l’haleine vierge.

N’hésite pas à annoncer à tes collègues que ton projet ne peut échouer, car tu es assisté d’amphase. S’il se trouve un ignare parmi eux qui te demande : "Qui c’est celui-là", rétorque avec mépris : "M’enfin, tu ne connais pas amphase ? C'est le fameux inventeur du tableau vierge à 3 colonnes". :mrgreen:

Dans la foulée des éclaircissements : résumer l’analyse systémique à un tableau, c’est comme dire qu’un ordinateur est un gros boulier électrique. Les constantes de l’analyse systémique sont certes "entrée, traitement et sortie", mais sinon, il s’agit d’une vaste approche pluridisciplinaire qui s’intéresse aux systèmes complexes dans leur ensemble (public visé : magistrats, managers, psychologues, scientifiques…). Quand on dit d’un désherbant qu’il est systémique, ça signifie que, quel que soit l’endroit où il est inoculé (fleurs, feuilles ou racines) il se répandra dans la sève pour faire crever la plante (analogie pour ajouter une note de gaîté végétale en phase avec mon humeur locale) :x . Elle peut être appliquée à l’informatique pour la modélisation par ex. voici un échantillon.

Pour en revenir à ton projet, je suis à nouveau dans le flou le plus total et j’ai bien peur de ne pas être seul dans ce cas, car ta brouette est aussi vide que ton tableau. Alors je chausse ma moustache pour repartir d’un bon pied hobbit (contrairement aux poulets, ils ont du poil aux pattes) :
Il s'agit d'un logiciel d'entreprise ultrasécurisé
- Que fait-il précisément ? Des frites ou du café ? Quelles sont les données en entrée et en sortie ? Par quel moyen va-t-il te permettre de rapprocher les réf. internes de Sogedis avec celles du fabricant ?

L’extension (suffixe) d’un fichier n’a aucune propriété intrinsèque (comme un coup de trique) et ne sert qu’à indiquer, suivant la correspondance enregistrée dans la base de registre, quelle application va l'ouvrir. Sais-tu que tu peux voir le contenu d’un fichier, quelle que soit son extension par un simple drag & drop dans une fenêtre de Scite (ou à défaut de Notepad++, des mêmes auteurs) ?
...supprimer un objet d'un fichier pdf me permettant d'enlever le masque "image" d'un pdf
– D’où sort ce fichier PDF ? Où va-t-il ? Quelles sont les données masquées par l’objet ?

Et cætera…

Es-tu bien sûr de rester dans la légalité ? Est-ce bien le doigt de Confucius que l’on voit ici ?

Sans réponses à ces questions et à celles dont tu complèteras la liste, je ne peux rien pour toi.
Encore une fois et cette règle s’applique dans bien d’autres domaines que l’informatique : pars du général pour arriver au spécifique et non l’inverse ; aie une vue d’ensemble du problème et code après. Alors, oublie les fonctions d’AutoIt pour le moment et au boulot !

Un peu de lecture pour ne pas t'ennuyer durant les pauses :
Avant tout. :idea:
Tout de suite après (c’est écrit en langue helvète, mais tu devrais pouvoir décoder sans _ReplaceStringInFile).
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] _ReplaceStringInFile pour fichier à extension non conventionnelle

#5

Message par JulienBoul »

Bonjour Amphase,


Ne crois pas que mon tableau est resté vierge très longtemps, j'ai bien deux version de ce tableau, celui qui te servira à illustrer tes propos lorsque tu reparleras de méthodologie systémique, et celui qui me sert actuellement à développer mon nouveau code.

Pour ton dernier lien, au sujet de Confucius, l'ouvrant en plein écran sur mon poste de travail, je t'avoue ma surprise et celle de mon collègue et voisin lors de la lecture de la page ^^, mais il ne s'agit pas de ce doigt, car là, je regarderai le ciel directement :-P

La lecture de "penser out the box" reste très générale, et reste l'explication d'un "principe", qui peut être développé par la lecture de la trilogie des fourmis de Bernard Werber, première lecture de ma jeunesse qui reste une référence en bien des circonstances pour moi. Je te conseille en particulier l'encyclopédie (un simple livre de poche) du savoir relatif et absolu, qui parle de cette ouverture d'esprit avec des exemples concrets tout à fait saisissants. Ca n'est pas de la grande littérature, certaines infos sont à recouper, mais c'est plein de bon sens, et ça aide au développement (quand j'étais ado, le relire étant adulte relativisera surement mon jugement).
Pour les deux dernières sources, je ne vais pas abuser trop de mon temps de travail, sachant qu'à l'approche de Noel, et travaillant dans le commerce, je commence a voir mes journées se remplir généreusement.
Néanmoins, je les ai épinglées en favoris et les lirais à l'occasion, bien que ça me semble un peu imbuvable si un minimum de concentration n'est pas de mise et lorsque l’on n’est pas trop sensibilisé à ces notions.

En ce qui concerne les éclaircissements demandés, J'ai bien peur de ne pas pouvoir donner beaucoup plus d'informations, le logiciel ne fait ni frites ni café, malheureusement, je peux néanmoins expliquer son principe économique.
Les données à extraire sont les mêmes que celles du précédent site, sauf que cette fois-ci, il a TOUTES les données recherchées, avec les relation entre appareil-pièces détachées le composant, il a les notices, les équivalences, les modes d'emploi, les prix actualisés des fournisseurs etc...
Le hic, c'est que leur modèle économique est de facturer l'interrogation de leur base de données. Facturation qui est effectuée même si j'automatise, et d'ailleurs, si je vais rechercher chaque PDF avec les données qui sont liées, ça va nous faire une jolie facture pour cette fin d'année, sachant que je pourrais consulter beaucoup plus de page qu'une équipe d'humain pourraient consulter...
Donc éthiquement et légalement, j'alimente leur business modèle, reste la question de la conservation des données, mais comme ces données sont la propriété du fournisseur, elles le leur appartiennent pas directement et on en revient au débat du topic précédent.

Au sujet des extensions du fichier, j'avais remarqué qu'en renommant en *.txt on avait bien le code (crypté ou pas) qui s'affichait mais je n'avais jamais essayé sur scite ou n++ (j’ai appris également que c’était les mêmes auteurs, je vais en parler à mon responsable qui ne jure que par N++), au final, ça reste des éditeurs de texte, rien de surprenant. Je ne savais pas que les extensions servaient juste à dire à tel logiciel d'ouvrir tel ou tel fichier. Je ne suis pas informaticien à la base, j'ai juste fait des études d'économie/math/stat/droit. Qqch de très général, et donc absolument pas technique, ce qui peut expliquer que je manque de méthodologie concernant le code et la gestion de projet.
Professionnellement, j'arrive à de la gestion de projet, et je suis ravi de tes conseils de lecture, car je suis certain qu'ils m'aideront à me construire professionnellement.

Pour revenir à mon fichier PDF, il est édité par un clic sur "imprim" dans mon logiciel, il se stoque en provisoire lorsque je clic sur "imprim" dans mes fichiers "temp" et je peux modifier ce fichier "temp" qui se nomme nom_fichier.1 pendant que la fenêtre d'impression reste ouverte (fenêtre classique lorsque tu choisis d'imprimer n'importe quel document sur Windows).
Je modifie donc ce fichier en supprimant un objet (image transparente qui m'empèche de copier-coller les données du PDF sur chaque page du PDF) et j'enregistre mon fichier *.1 modifié.
Ainsi, lorsque je valide mon impression (fenêtre restée en arrière-plan), j'imprime mon fichier *.1 sans ce masque, et le rendu est *.pdf ou je peux saisir du texte, dans le masque transparent qui m'en empêche.

Je clarifie les choses dans ma tête, sur papier, avec toi et les lecteurs sur le topic, et je reviens vers vous prochainement avec un cahier des charges un peu plus clair. Pour le moment, c'est en effet prématuré de demander de l'aide, et pour vous y répondre, si je ne sais pas clairement expliquer les actions à effectuer... Remplir ma brouette, je vais y penser.


Cordialement,
Julien.
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [R] _ReplaceStringInFile pour fichier à extension non conventionnelle

#6

Message par JulienBoul »

Bonjour Amphase,

Comme promis, j'ai pris le temps de regarder le lien que tu m'avais envoyé pour m'aider à clarifier mes idées. http://lgl.isnetne.ch/modelisation-2005 ... cision.pdf
Je t'avoue qu'au début, j'ai trouvé ça un peu théorique, donc un peu "lourd" avec les collègues qui s'expriment dans le bureau autour, et dès l'apparition des premiers exemples, j'me suis vite pris au jeu jusqu'à la représentation sous forme d’une table de décision. Par la suite, les cas se sont corsés (confrontations, minimisations), et je t'avoue que j'ai un peu perdu pied.
Néanmoins, j'adore le principe de la table de décision, c'est vrai que ça pourra m'aider pour les conditions surtout lorsqu'une condition dépend d'autres conditions liées. J'irai relire dans quelques mois, lorsque j'aurai appris à maitriser les bases, ça me semblera peut être plus accessible pour les éléments les plus avancés.

Merci pour cette lecture.

@+
Julien.
Répondre