Assigner 1 image à 1 fichier.[RESOLU]

Post Reply
Message
Author
did18
Posts: 417
Joined: Wed 19 Nov 2014, 22:27

Assigner 1 image à 1 fichier.[RESOLU]

#1 Post by did18 »

Bonjour à tous

Tout est dans le titre (ou presque)...

- Soit monfichier.txt (dans /home/monrep/monfichier.txt)
- Soit monimage.png (dans /home/data/mesimages/monimage.png)

Comment assigner monimage.png à monfichier.txt en ligne de commande (sans utiliser le click droit de rox, puis définir l'icône) ?
Pas question non plus que tous les '.txt' aient la même image (monimage.png)...

Une idée ou mieux, un bout de code me serait agréable.
Merci.
Bonne journée.
Last edited by did18 on Tue 25 Aug 2015, 14:59, edited 1 time in total.

User avatar
Argolance
Posts: 3767
Joined: Sun 06 Jan 2008, 22:57
Location: PORT-BRILLET (Mayenne - France)
Contact:

#2 Post by Argolance »

Bonjour did18,
Tu peux peut-être insérer, au moyen d'un petit script, ces lignes (correspondant à tes fichiers) dans /root/.config/rox.sourceforge.net/ROX-Filer/globicons:

Code: Select all

  <rule match="/chemin/fichier">
    <icon>/chemin/image.png</icon>
  </rule>
Si tu ne parviens pas à faire le petit script, je peux t'aider...

Cordialement.

did18
Posts: 417
Joined: Wed 19 Nov 2014, 22:27

#3 Post by did18 »

Bonsoir Argolance

En fait j'aurai du apporter les précisions suivantes :

Je ne connais le nom du 'fichier.txt' qu'une fois qu'il est créé (le nom est défini par une variable renseignée par l'utilisateur).
Je ne connais pas non plus à l'avance le répertoire final ou se trouve 'fichier.txt' (donné également par une variable renseignée par l'utilisateur) et idem pour l'image à associer dont l'extension pourra aussi bien être .png, ico etc.

Donc, je dois passer par des chemins 'relatifs' et non par des chemins 'absolus' comme suggéré dans ton exemple (c'est de ma faute, j'aurai du être plus précis dans ma demande)...

Pour corser l'affaire, il peut y avoir (et ce sera souvent le cas) plusieurs fichier1.txt, fichier2.txt dans le répertoire de sortie.
C'est l'interrogation des variables qui déterminera le fichier à accèder (ça je sais faire) et associer l'image.

En tout cas, merci pour ton aide.
Bonne soirée.

Pelo

pourquoi en ligne de commandes ?

#4 Post by Pelo »

pourquoi en ligne de commandes ? clique droit sur le fichier,
set icon, et glisser l'icône voulue. çà marche aussi pour les fichiers txt

did18
Posts: 417
Joined: Wed 19 Nov 2014, 22:27

#5 Post by did18 »

Bonjour Pelo

Je développe (enfin je devrai plutôt dire je bidouille) un petit programme dans lequel j'obtiens, après traitement, des fichiers de plusieurs types.
Le fait d'associer une image à certains de ces fichiers ne constitue pas une obligation mais un plus pour une utilisation ultérieure.
Bien sur...
clique droit sur le fichier,
set icon, et glisser l'icône voulue. çà marche aussi pour les fichiers txt
reste possible, mais si ce travail est fait en amont, ce sera toujours une contrainte de moins pour l'utilisateur, c'est pour éviter cette manipulation que je souhaite le faire par programmation.
Je t'accorde que cela reste de l'habillage et que cela ne nuis en rien au fonctionnement de l'ensemble...
C'est plus pour le 'fun' et également pour ma culture perso...
Bonne journée.

User avatar
Argolance
Posts: 3767
Joined: Sun 06 Jan 2008, 22:57
Location: PORT-BRILLET (Mayenne - France)
Contact:

#6 Post by Argolance »

Bonsoir,
Pour corser l'affaire, il peut y avoir (et ce sera souvent le cas) plusieurs fichier1.txt, fichier2.txt dans le répertoire de sortie.
Du moment qu'ils portent des noms différents, alors ce n'est pas un problème. Pour les images peut-être qu'en faisant un lien pour chaque image, portant le même nom et pointant sur l'image désirée?
En fait, on nage un peu dans le brouillard car pas suffisamment de précisions. :wink:

Cordialement.

did18
Posts: 417
Joined: Wed 19 Nov 2014, 22:27

#7 Post by did18 »

Bonsoir Argolance

J'ai conscience que mes explications sont un peu... Décousues.
Pour faire simple:
A la fin du traitement je me retrouve avec 2 fichiers A (le .txt) et B (image).
Je ne connais leurs emplacements respectif qu'une fois qu'ils ont été créés.

Ce que je faisait (jusqu'à présent) avec rox, je parcour l'arborescence et je vais cliquer droit sur le fichier A puis dans le popmenu je choisi Définir l'icône.
Une nouvelle fenêtre s'ouvre... Il y a 2 boutons radio (pour tous les fichiers de types...) Et (Pour le fichier /chemin/du/fichier uniquement).
Sous ces 2 boutons radio, le cadre receveur du chemin du fichier B (l'image).

Je souhaiterai reproduire cette association que l'on fait par drag and drop dans rox, mais par programmation.

J'espère avoir été plus clair.
Bonne soirée.

User avatar
Argolance
Posts: 3767
Joined: Sun 06 Jan 2008, 22:57
Location: PORT-BRILLET (Mayenne - France)
Contact:

#8 Post by Argolance »

Bonjour,
Je souhaiterai reproduire cette association que l'on fait par drag and drop dans rox, mais par programmation.

Code: Select all

  <rule match="/chemin/fichier">
    <icon>/chemin/image.png</icon>
  </rule> 
C'est exactement ce que font ces lignes (données plus haut), introduites automatiquement par ROX dans le fichier /root/.config/rox.sourceforge.net/ROX-Filer/globicons, mais que tu peux aussi insérer dans globicons via du code dans ton script ou même via un script séparé qui examine les répertoires, liste les fichiers et leur attribue, par un lien symbolique, l’icône requise. :roll:

Cordialement..

did18
Posts: 417
Joined: Wed 19 Nov 2014, 22:27

#9 Post by did18 »

Bonsoir Argolance

Les 3 lignes que tu indiques fonctionnent. -C'est déjà une excellente nouvelle-.
Avec quelques modifications, on peut y passer directement les variables.

Voici l'axe (que je pense logique) du raisonnement.
1)-Ouvrir le fichier 'globicons' pour modification.
2)-Vérifier si l'association n'est pas déjà effective
3)-créer l'association.

Dans le détail maintenant...

executable 'est une variable public qui contient le path du fichier à associer (le fichier A cité plus haut).
iconeprog 'est une variable public qui contient le path de l'image qui doit être associée au ficher A.

Code: Select all

Private Sub AssociationFichier()
Dim assoc As Boolean = False 'on positionne assoc sur faux (valeur par défaut)
Dim numeroligne, numero, numerobis As Integer
Dim $ligne As String
  'on ouvre le fichier /root/.config/rox.sourceforge.net/ROX-Filer/globicons,
FMain.FichIni = Open "/root/.config/rox.sourceforge.net/ROX-Filer/globicons" For Append
While Not Eof(FMain.FichIni) 'tant que l'on est pas à la fin du fichier
Line Input #FMain.FichIni, $ligne 'lecture de la ligne en cours
Print $ligne 'affichage de la ligne dans la console
numero = InStr($ligne, executable) 'compare le contenu de la ligne en cours avec le path de la variable executable et renvoi le n° de ligne du fichier globicons si égalité.
  If numero <> 0 Then 'si un raccourci vers ce fichier existe déjà
    Inc numeroligne 'on incrémente le N° de numeroligne pour tester si la ligne suivante ne donnerai pas l'affectation à la même image.
    Line Input #FMain.FichIni, $ligne 'lecture de la ligne (numeroligne+1(celle qui contient normalement l'image))
    numerobis = InStr($ligne, iconeprog) 'on regarde si l'icone n'est pas déjà associée à ce fichier
      If numerobis <> 0 Then 'l'association de cette image à ce fichier existe déjà !
         Close FMain.FichIni 'on ferme le fichier 'globicons'
         Return 'et on sort de la procédure.
         Else 'sinon
         Dec numeroligne '(on décrémente (pas sur que ce terme existe ;-) bref on retire -1 à numeroligne pour reprendre la vérification à létat précédent.
      Endif
    Else 'sinon l'association pour un des deux path précédent n'existe pas
      assoc = True 'donc on bascule assoc sur vrai
  Endif 'fin des 2 tests, on reprend la procédure.
Inc numeroligne 'on Inc...rémente numeroligne
Wend 'si on a atteint la fin du fichier 'globicons' on sort
If assoc = True Then 'il est vrai que l'association n'existe pas donc on peu la créer
  'On écrit dans le fichier (qui est ouvert en mode modification)
  Print #FMain.FichIni, "  <rule match=" & executable & ">"
  Print #FMain.FichIni, "    <icon>" & iconeprog & "</icon>"
  Print #FMain.FichIni, "  </rule>"
  Print #FMain.FichIni, "</special-files>"
Endif
Close FMain.FichIni 'on ferme le fichier
End 'fin de procédure
Dans l'absolu cette procédure fonctionne pour un fichier globicons.txt.
Malheureusement globicons est un fichier au format .xml !
Du coup je me trouve avec un joli message qui m'indique :

"Tentative de lecture d'un fichier XML en tant que fichier texte. Le fichier '/root/.config.rox.sourceforge.net/ROX-Filer/globicons' est peut-être altété."

Heureusement que j'avais fait une copie au préalable de ce fichier...

Un rapide coup d'oeil sur le fichier 'globicons' modifié me renvoi ce résultat.

Code: Select all

...
...
...
<rule match="/usr/sbin/dotpup">
    <icon>/usr/local/lib/X11/pixmaps/pet48.png</icon>
  </rule>
  <rule match="/usr/local/bin/defaultdraw">
    <icon>/usr/local/lib/X11/pixmaps/draw48.png</icon>
  </rule>
</special-files>
  <rule match=/mnt/sda2/test/ali/usr/local/bin/ali>
    <icon>/mnt/sda2/test/baba/usr/share/pixmaps/baba.png</icon>
  </rule>
</special-files>
Les 4 dernières lignes ont bien été insérées, mais ne font pas partie intégrante du fichier. De plus les " entre <rule match= et /mnt/sda2/test/ali/usr/local/bin/ali et avant > sont manquante. J'ai eu beau tester en mettant un double ' rien n'y fait...

Je ne sais pas modifier un fichier .xml pour y introduire les dernières lignes de la procédure.
A contrario, la lecture du fichier 'globicons' reste possible et valide ou non le déclenchement de l'association (ali et baba) par la variable assoc.

Si ton aide pour la création d'un petit script est toujours d'actualité, je l'accepte avec plaisir, je l'adapterai par la suite dans ma prog afin de modifier globicons.

Pardon pour la tartine, mais il me semblait important de te donner tous ces détails.

Bonne soirée.

User avatar
Argolance
Posts: 3767
Joined: Sun 06 Jan 2008, 22:57
Location: PORT-BRILLET (Mayenne - France)
Contact:

#10 Post by Argolance »

Bonjour,
Il faut d'abord que tu prévoies de supprimer </special-files> en fin de fichier xml (</special-files> redondant et donc tout ce qui vient après n'est, au mieux, pas pris en compte, au pire corrompt ton fichier xml qui devient incompréhensible pour l’interpréteur):

Code: Select all

sed -i "/\/special-files>/d" /ton/fichier/xml
ou quelque chose d'équivalent suivant ta façon de coder et ensuite seulement insérer tes lignes en fin de fichier comme indiqué dans ton code.
Certainement une erreur d'attention de ta part car je suis certain que je ne t'apprends rien! :wink:
Bon courage.

Cordialement.

did18
Posts: 417
Joined: Wed 19 Nov 2014, 22:27

#11 Post by did18 »

Bonsoir Argolance

Non je ne connaissais pas la commande sed.
Merci Argolance. :lol:

On pourrait même parler d'outil tellement cette commande est puissante !
J'ai mis un peu de temps à comprendre (une partie) de son fonctionnement, mais finalement je suis arrivé à mes fins.

En fait, il n'y aura pas de suppression, juste une 'Insertion' des 3 lignes dans le fichier.xml globicons.

Dans ma procédure, grace à la variable numeroligne, je peux connaitre le nombre de lignes constituant le fichier globicons (dans mon exemple 93).
Il me suffit donc d'insérer avant la 93ème ligne mes 3 lignes d'association.

Voici les 3 lignes de commande que je vais intègrer dans mon code.
sed -i "93i \ \<rule match=\"/path/ali">" globicons
sed -i "94i \ \<icon>/path/baba.png</icon>" globicons
sed -i "95i \ \</rule>" globicons

Je viens de tester dans un terminal et le résultat est là :

Code: Select all

...
...
...
</rule>
  <rule match="/usr/local/bin/defaultdraw">
    <icon>/usr/local/lib/X11/pixmaps/draw48.png</icon>
  </rule>
  <rule match="/root/.pup_event/drive_sr0">
    <icon>/usr/local/lib/X11/pixmaps/optical48.png</icon>
  </rule>
  <rule match="/path/ali">
    <icon>/path/baba.png</icon>
  </rule>
</special-files>
Donc mon problème est résolu !

Pour nos amis lecteurs 2 liens en rapport avec le sujet (et qui ont permis la résolution de ce problème)...

http://www.commentcamarche.net/faq/6616 ... n-de-texte

http://www.commentcamarche.net/faq/9536 ... sed-part-i

Encore merci Argolance.

Bonne soirée.

User avatar
Argolance
Posts: 3767
Joined: Sun 06 Jan 2008, 22:57
Location: PORT-BRILLET (Mayenne - France)
Contact:

#12 Post by Argolance »

De nada! :)
Content pour toi et ton script dont nous sommes maintenant curieux de connaitre la fonction...

Cordialement.

Post Reply