Résolu Extraire un nom de fichier vers une ligne spécifique d'un fichier texte

honimoura

Habitué
Salut a tous,
Je sais qu'il y a deja des sujets concernant ma demande mais la difference que je cherche n'y est pas ou je ne l'ai pas trouvé.
Je cherche a recuperer le nom du 1er fichier d'un dossier et de copier ce nom vers une ligne spécifique d'un fichier texte.
Exemple:
Dossier: 1 Bob.mp3
2 Jean.wav
3 Arthur.mp3

Fichier Text; -1- est partie ce matin
Mais -2- n'etait pas là, il etait avec -3-

Le but étant de faire un menu graphique avec le logiciel "rainmeter" qui utilise des fichiers textes afin de faire un choix parmi une liste de musiques.
Je dois donc faire un truc du genre :

[Music1]
Meter=string
MeterStyle=TextStyle
StringAlign=CENTER
text="Musique01"
LeftMouseUpAction=["c:\Users\bob\Music\Musique01.mp3]

[Music2]
Meter=string
MeterStyle=TextStyle
StringAlign=CENTER
text="Musique02"
LeftMouseUpAction=["c:\Users\bob\Music\Musique02.mp3]

De cette manière, il affichera les titres et en cliquant dessus il lancera la musique selectionné, mais je cherche un moyen pour qu'avec un batch il note le nom de chaque titre la ou j'ai ecrie "musique01", "musique02" .
J'avais donc fait un batch avec un truc genre :

dir c:\users\bob\music\ /b > musiques.txt

Afin de récupérer chaque titre l'un après l'autre sans les tailles, dates de créations, etc
Mais là je suis coincé, comment faire pour que la ligne 1 du fichier "musiques.txt" se positionne là ou j'ai écrie dans l'exemple "musique01" et la ligne 2 a "musique02", etc, etc.

Je cherche juste la fameuse ligne qui dirait :

Copy ligne1 "musiques.txt > ligne5 case7 "MenuMusiqueRainmeter.txt"

En francais : Copie la première ligne du fichier Musiques.txt vers la cinquieme ligne au 7eme emplacement de cette ligne dans le fichier MenuMusiqueRainmeter.txt

Je ne pense pas que ce soit compliqué mais quand on ne sait pas du tout la syntaxe a utiliser on n'peux pas l'inventer :(

Je galère bien, si vous avec une idée

Merci.
 

magellan

Modérâleur
Staff
heuuu tu veux faire ça comment? il faut déjà déterminer quel langage tu maîtrises, parce qu'en batch (.bat) ça me paraît pour ainsi dire impossible à faire ou presque.
 

Melaure

Modérateur
Clair, en bash/ksh c'est trivial !!! Peut-être avec le bash qu'on peut installer dans Windows 10 (pas essayé je suis encore sous Seven) ?

Par contre tu devrais essayer de n'utiliser qu'un seul format de fichier de musique pour uniformiser ... pas joli le .wav au milieu ;)
 

patt024

Habitué
Je ne connais pas rainmeter, mais un peu de recherche sur Google m'a permis de trouver ceci :

utilisation de variables : https://docs.rainmeter.net/manual/variables/

Lecture d'un fichier texte : https://docs.rainmeter.net/snippets/read-write-file/

donc si tu utilise ton batch qui cré ton fichier texte, rainmetter peut le lire et l'affecter à des variables que tu peux utilisé dans ton code.sous text=[variable]
 

honimoura

Habitué
Magelian : Mais si c'est possible en serrant les dents, j'en suis sure :D et oui j'utilise le batch et le rainmeter code qui utilise des variables mais je pige pas encore tout :s

Melaure : J'utilise que du mp3, là c'etait un exemple ^^

patt024 : C'est exactement ce que je veux faire mais comme je ne sais pas comment creer la variable qui selectionne la 1er ligne du fichier liste.txt pour la claquer a la 3eme ligne de la 5eme case de cette ligne, j'me suis dit que peut etre en batch c’était possible ... mais a voir le batch est encore plus limité :d

Je ne sais pas si la formule read-write-file permet de coller a l'emplacement voulu, mais grace a toi j'ai deja une partie en récuperant la ligne voulu, me reste plus qu'a la coller au bonne endroit.

Ayant une piste grace a Maître patt024, je vais approfondir tout ca, si je trouve je viendrais mettre la solution, sait on jamais, peut être qu'un mordu de Rainmeter voudra la même info ;)

PS: Rainmeter est un logiciel permettant d'afficher pratiquement tout sur le bureau, temperatures, utilisations, etc, de tout les peripheriques, mais ca ne s'arrete pas là, vous pouvez aussi faire des menus comme la taskbar de windows en plus poussé, creer votre horloge analogique avec un rendu personalisé.

Je vous donne un lien pour vous faire une idée :

Contrairement aux idées recus, ca ne consomme pas énormément, là je suis a 2% du proco avec 120 mo de ram, ok il y a 10 ans 120Mo ca comptait mais de nos jours ...

Enfin bref, la pub est fini, merci a vous, je reviens des que je trouve la formule spécifique a mon problème ;)
 

patt024

Habitué
Je vais tenter de t'aider malgré que je ne connais pas vraiment ce langage.

Tout d'abord la fonction de lecture de fichier :
Code:
function ReadFileLines(FilePath)
	-- HANDLE RELATIVE PATH OPTIONS.
	FilePath = SKIN:MakePathAbsolute(FilePath)

	-- OPEN FILE.
	local File = io.open(FilePath)

	-- HANDLE ERROR OPENING FILE.
	if not File then
		print('ReadFile: unable to open file at ' .. FilePath)
		return
	end

	-- READ FILE CONTENTS AND CLOSE.
	local Contents = {}
	for Line in File:lines() do
		table.insert(Contents, Line)
	end

	File:close()

	return Contents
end

ensuite tu appel la fonction avec un tableau que tu as préalablement déclaré... ici je ne semble pas trouver de docs, mais çà doit ressembler à :

Code:
local tableau={}

tableau = ReadFileLine("C:\dossier\fichier.txt")

Ensuite dans ton code plus haut tu remplace le nom par la variable :

Code:
[Music1]
 Meter=string
 MeterStyle=TextStyle
 StringAlign=CENTER
 text=#tableau[1]#
 LeftMouseUpAction=["c:\Users\bob\Music\#tableau[1]#]

 [Music2]
 Meter=string
 MeterStyle=TextStyle
 StringAlign=CENTER
 text=#tableau[2]#
 LeftMouseUpAction=["c:\Users\bob\Music\#tableau[2]#]

Je ne connais pas vraiment le LUA (language de rainmeter) donc il peut y avoir des erreurs de syntaxe, mais j'espère que çà va t'aider.
 

honimoura

Habitué
Merci encore a patt024, pour quelqu'un qui ne connait pas ce language, tu en a vite compris la logique.

Désolé de ne pas avoir répondu avant, la journée d'hier était chargée.

Alors afin d'être tout a fait sincère, je ne comprends pas la première partie, qui concerne la lecture du fichier.
En cherchant je vois que tu es dans le vrai mais n'ayant jamais utilisé cette fonction, je galère a en comprendre le sens, mais ca va venir je pense.

Si j'ai bien compris, la 1ere ligne en donne le chemin du fichier
La 2eme ligne ouvre ce fichier
et la 3eme retourne un message si le fichier n'existe pas
Si tu pouvais juste me dire si j'ai bien compris ou si je suis a coté ^^

Concernant la 2eme partie, je ne pense pas que l'on puisse créer de "tableau" en lua, mais je pense que je peux créer des variables de manière a dire :

Variable1=ligne1
Variable2=ligne2
etc

Pour que dans la partie 3, qui est parfaitement rédigée, je remplace #tableau[1]# par #variable1#, etc.

Une fois la 1ere partie maîtrisée, il me faudra réussir a récupérer dans chaque variable la ligne désiré.
Je pense même, et je vais tester ca, qu'il est possible de se passer du fichier "liste.txt" de manière a le faire directement en Lua.
Je vais mettre mon idée avec un code erroné pour les parties que je ne maîtrise pas afin d'en décrire le but:

Variable1=ligne1
Variable2=Ligne2
Variable3=Ligne3

[RecupLigne1]
Ligne1=dir ["C:\users\bob\Music" Fichier1]
Ligne2=dir ["C:\users\bob\Music" Fichier2]

[Music1]
Meter=String
MeterStyle=TextStyle
text=#Variable1#
LeftMouseUpAction=!Execute ["C:\Users\Bob\Music\#Variable1#]

[Music2]
Meter=String
MeterStyle=TextStyle
text=#Variable1#
LeftMouseUpAction=!Execute ["C:\Users\Bob\Music\#Variable2#]

De cette manière pas besoin de creer un batch qui liste les fichiers pour ensuite utiliser un code lua pour récuperer des infos dans un fichier texte lui même rempli par un fichier batch ... trop bordélique je pense.

Je vais donc chercher de ce coté là et voir ce qui est possible sans devoir utiliser de batch ... priez pour moi humble pécheurs.
;)
 

Melaure

Modérateur
Bon courage alors, et désolé je peux t'aider en batch unix, mais pas en rainmeter ;)
 

honimoura

Habitué
J'y suis presque ;)
Après recherche intensif, il faut utiliser une extention .dll crée pour rainmeter lui donnant en gros (très gros même) la fonction "dir" du dos. Ce qui permet de faire le tout sans tiers (cmd, etc)
Le tout permet de fonctionner comme un explorer.exe

Mais avec quelques bidouilles on peut l'utiliser pour n'afficher que le contenu d'un seul dossier.
Comme mon but est de faire un bouton "musiques" qui, une fois activé, déroule une fenêtre avec les musiques dispo.

Une fois terminé, je donnerais les détails ainsi que les liens nécessaire a la compréhention et éxemples pour faire vos propres skins

A très vite et merci pour votre aide a tous !!
 

honimoura

Habitué
Meilleure réponse
Me revoici, me revoilà :)
Alors, accrochez vos slips on y va.

Comme je vous l'avais dit juste au dessus, il faut une dll a ajouter dans le dossier "plugins" de Rainmeter : <prenez celle du 12/11/2012
Vois la placer dans "Rainmeter\Plugins"

Ensuite c'est assé simple une fois qu'on a pigé comment ca marche.
Voici mon code :

[MeasureCurrentFolder]
Measure=Plugin
Plugin=Plugins\FileList.dll
Field=FolderPath
Path=C:\Users\"bob"\Music
SortBy=Name
SortAscending=1
ShowDotDot=1
ShowFile=1
ShowFolder=1
HideExtension=1
;Extension="mp3"

[MeasureFileName0]
Measure=Plugin
Plugin=Plugins\FileList.dll
Field=FileName
FileIndex=0

[MeasureFileName1]
Measure=Plugin
Plugin=Plugins\FileList.dll
Field=FileName
FileIndex=1

[MeasureFileName2]
Measure=Plugin
Plugin=Plugins\FileList.dll
Field=FileName
FileIndex=2

[MeasureFileName3]
Measure=Plugin
Plugin=Plugins\FileList.dll
Field=FileName
FileIndex=3

[MeasureFileName4]
Measure=Plugin
Plugin=Plugins\FileList.dll
Field=FileName
FileIndex=4

[MeasureFileName5]
Measure=Plugin
Plugin=Plugins\FileList.dll
Field=FileName
FileIndex=5

[MeasureFileName6]
Measure=Plugin
Plugin=Plugins\FileList.dll
Field=FileName
FileIndex=6

[MeasureFileName7]
Measure=Plugin
Plugin=Plugins\FileList.dll
Field=FileName
FileIndex=7

-----------------------------------------

[MeterFileName2]
Meter=STRING
MeasureName=MeasureFileName2
X=15
Y=15
StringAlign=LEFT
Text="%1"
LeftMouseDownAction=!execute [!RainmeterPluginBang "MeasureFileName2"]

[MeterFileName3]
Meter=STRING
MeasureName=MeasureFileName3
X=0r
Y=15r
StringAlign=LEFT
Text="%1"
LeftMouseDownAction=!execute [!RainmeterPluginBang "MeasureFileName3"]

[MeterFileName4]
Meter=STRING
MeasureName=MeasureFileName4
X=0r
Y=15r
StringAlign=LEFT
Text="%1"
LeftMouseDownAction=!execute [!RainmeterPluginBang "MeasureFileName4"]

[MeterFileName5]
Meter=STRING
MeasureName=MeasureFileName5
X=0r
Y=15r
StringAlign=LEFT
Text="%1"
LeftMouseDownAction=!execute [!RainmeterPluginBang "MeasureFileName5"]

[MeterFileName6]
Meter=STRING
MeasureName=MeasureFileName6
X=0r
Y=15r
StringAlign=LEFT
Text="%1"
LeftMouseDownAction=!execute [!RainmeterPluginBang "MeasureFileName6"]

[MeterFileName7]
Meter=STRING
MeasureName=MeasureFileName7
X=0r
Y=15r
StringAlign=LEFT
Text="%1"
LeftMouseDownAction=!execute [!RainmeterPluginBang "MeasureFileName7"]

Simple mais fonctionnel.

En regardant bien je n'ai pas inséré [MeterFileName0] et [MeterFileName1] car ceux-ci vous donne "." (retour racine) et "deskop.ini", si vous voulez en faire un explorer vous devrez inséré le retour racine "." (ptet pas le bon nom, pour revenir dans le dossier parent de votre position quoi.)

Mais comme je ne suis pas un dictateur je vais même vous filer un lien d'exemple plus complet qui m'aura bien aidé :


La le mec c'est décarcassé, icone pour chaque type de fichiers, etc, etc.

Je tiens avant de clôturer a tous vous remercier pour votre aide de réflexion sur mon problème.
Même le site du propriétaire de ce logiciel n'est pas autant présent sans leur tirer dans les pattes.

Je remercie tout particulièrement "patt024" qui m'a permit de rechercher aux bons endroits, m'a permit de me poser les bonnes questions et d'y mettre les bonnes réponses.

Je ne peux malheureusement pas te définir de "meilleur réponse" pour éviter que les suivants n'essaye ta méthode avant de tomber sur la solution, mais encore une fois Merci a toi mille fois !!

 

honimoura

Habitué
PS: Pensez a changer le chemin du dossier cible, sauf si vous vous appelez "bob", das ce cas enlevez juste les guillemets ;)
 

patt024

Habitué
Bonjour,

Je suis content si tu à trouvé une solution à force d'acharnement ! Désolé pour le délai de réponse, je suis au Québec donc pour moi c'est cette nuit que tu m'a répondu plus tôt ;-)

Çà fait plaisir si j'ai pu aider !!! et merci pour ta solution, çà peut surement en aider d'autres dans le futur !
 

honimoura

Habitué
Y a pas d'souci ^^
Oui ton aide m'a vraiment été précieuse.
La je suis partie dans encore plus tordu ^^

J'utilise la formule pour afficher des titres de musiques, quand soudain j'me suis dis ... autant pousser le truc pour les jeux installés !
Puis je me suis dis même Faire un dossier avec les raccourcis et un avec les jaquettes des jeux en question !!
Alors je me suis dis qu'il fallait faire un scan du dossier "raccourcis", de retenir le titre et de scanner le dossier "jaquettes" et de chopper l'image qui a le même titre !!
Mais le souci c'est qu'il retient pas par exemple "blood bowl 2" mais "blood bowl 2.ink" ^^

Alors J'ai fait une partie qui scanne le dossier raccourci et donne un titre par variable
Puis un autre scanne dans le dossier jaquette et affecte la 1ere jaquette au 1er raccourci, la 2eme au 2eme raccourci, etc, vue qu'ils ont le même ordre^^
Mais si il fait un second scanne il oublie le premier ... donc il me met le titre de la jacquette comme resultat des deux scannes ...

La je vais tester 2 trucs, 1 : Creer autant de variables que j'ai de jeux a afficher, affecter un resultat par variable afin qu'il les garde, puis mettre le second scanne après tout ca ... en espérant que ca passe.

Sinon 2 : Copier la dll et la coller au même endroit avec un nom différent pour qu'il ai 2 scannes totalement autonome l'un de l'autre vue qu'il ne cherche pas les dlls mais les chargent sans savoir a quoi elle servent ... j'espère y arriver, si jamais je dirais si une des méthodes fonctionne ... ^^

Attends ... en écrivant une autre idée me vient ... un peux bordelique mais passable ... si je mets tout dans le même dossier et que je lui dis "affiche le fichier 1 et donne lui comme action le 2eme fichier" en imaginant que le premier fichier soit "BloodBowl2.ink" et le second "bBloodBowl2.jpg" (wé dans cette exemple le raccourci est avant la jaquette mais j'peux inverser)

Je vais tester tout ca et je reviens ... peut être créér un nouveau sujet ou j'laisse ici ?
 

honimoura

Habitué
Bon, les 2 premières méthodes faut oublier ... j'ai cru que c'était parce que je réécrivais sur les mêmes index mais même en les modifiant il veut pas ... Comment peut il modifier des résultats qui n'ont pas le même index ni le même nom de variables ... je pige pas lol
 

patt024

Habitué
Pour le .lnk çà a surment un lien avec cette ligne :
Code:
HideExtension=1
;Extension="mp3"

Je crois que tu devrais enlever le ; devant extension et mettre lnk (attention c'est un L pas un i)

pour les variables c'est normal, des que nouveau scan est lancé il efface le reste, tu devrais peut-être créer une ou des nouvelle(s) variable(s) pour lui mettre les renseignements que tu veux conserver avant de lancer le 2e scan. De cette façon tu va conserver les donnés que tu veux.
 

honimoura

Habitué
Alors pour le "HideExtension=1" c'est juste pour l'affichage mais il retient quand même l’extension.
Pour ";Extension="mp3" j'ai essayé avec ou sans le ";" et ca ne change rien ... j'pige pas.

J'ai essayé de récupérer les données dans des variables avant le second scan mais ca ne change rien, il modifie quand même leur résultat alors que le scan suivant n'utilise pas les mêmes variables ...

J'en suis arrivé a la méthode "tout au même endroit" ... comme ca il liste les ".lnk" et les ".jpg, .jpeg" en même temps ... je dois juste prendre des images jpg ou jpeg pour être sûre qu'elle soit avant les "lnk" sinon une ".png" m'inverserait l'ordre que j'utilise ...

Bordélique mais fonctionnel ... tout s'que j'aime pas mais là, pas l'choix.

Donc j'utilise la même méthode que pour les ".mp3" du coup ...
 

honimoura

Habitué
Etant un lache rien, j'pense que j'ai trouvé mais j'ai encore quelques bugs ...
Il faut faire un fichier externe par recherche avec leurs variables dans leurs fichiers respectif, de cette manière aucune des deux recherches ne connait l’existence de l'autre et donc n'interférente pas !

Ensuite dans le fichier principale il faut faire appel au deux autres afin d'utiliser leur variables qui contiennent le résultat des recherches.

J'ai juste un souci au niveau des appels pour le moment, je reçois bien les résultat de l'un mais je n'arrive pas a joindre le second :(

Je l'aurais un jour, je l'aurais !!
 

honimoura

Habitué
CA Y EST !!!!
Alors j'avais un peux raison tout a l'heure ...

En premier, deux check file list dans un seul fichier = problèmes (j'pige toujours pas pourquoi)

En second, il faut bien faire 2 plugins "Filelist.dll" j'ai copié/collé puis ajouté un "2" pour faire un "Filelist2.dll"

Ensuite un fichier Scan avec Filelist.dll pour les raccourcis (.LNK) que j'ai appelé "VariableLNK"
Ensuite un fichier Scan avec Filelist2.dll pour les jaquettes (.JPG, JPEG, PNG) que j'ai appelé "VariableJPG"

Rainmeter n'aimant pas 2 fichiers "conf" dans le même dossier je les ai rangé chaqu'un dans leur dossier.

J'ai ensuite créé mon fichier "conf" a la racine de ces deux dossiers pour afficher un fenêtre qui fait appel aux variables des deux fichiers de recherches VariableLNK et VariableJPG.

Et là mes dossiers "Jaquettes" et "Raccourcis" sont séparrés, propre, tout s'que j'aime !!

Je l'avais dit que je l'aurais nan ? :D

Encore merci a toi patt024, sans toi j'y serais toujours pas car j'ai toujours cru que c’était INK et pas LNK ^^
Je t'aime !!! :D

Encore un souci de réglé, a bientôt pour la suite des événement !!!
 

honimoura

Habitué
Enfin si vraiment je voulais que ce problème soit entièrement reglé, il faudrait qu'il recherche tout seul la jaquette du même nom que celui du raccourci mais avec les éxtentions le problème reste ... problématique ^^

Mais vous commencez a m'connaitre ... JE LÂCHERAIS RIEN !!!
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 059
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut