uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 17 nov. 2008 à 13:47
Ah oui, je n'avais pas vu ton pseudo ^^
Je pense que tu veux faire ça en mIRC donc.
Bon... je me souviens plus trop, mais je viens de regarder, là. A mon avis pour commencer il serait préférable de lire ton fichier avec $read() et non $readini() (sauf si tes sections sont nommées "1 2 3 etc"). Comme ça tu fais une boucle sur chaque ligne, et tu peux par exemple matcher sur "=". A partir de là tu fais un $gettok(<ligne>,2,$asc(=)) puis tu tokenizes sur l'espace et tu rajoutes donc "$2 $1" à ta variable globale. Enfin tu effectues un $sorttok(<var>,C,n) et voilà...
J'ai bon ? :p
Bon je dis peut-être de la merde, mais c'est comme ça que je ferais (voire même avec $fread() ..)
Donc en gros, si ton fichier n'est pas trop gros, ça donnerait un truc du genre : (de mémoire, donc pas testé)
var %result, %lines $lines(fichier.ini), %line 1 ;je ne sais plus si on part de 0 ou 1
while (%line <= %lines) {
if (= isin $read(fichier.ini,%line)) {
var %item $gettok(%line,2,$asc(=))
tokenize 32 %item
%result = %result $+ $2 $1 $+ ,
}
}
bon, et à partir de là tu retourne la moitié du truc.
Bon, j'ai fait du caca en fait, mais j'ai pas le temps de corriger je vais en cours, donc j'envoie quand même le commentaire au cas où :p
Bonne chance
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 17 nov. 2008 à 15:08
Nan, c'est pas si con de faire ca, mais ca fait boucler nous meme sur des lignes qu'on veut pas,
moi j'aurais plus jouer sur $readini, ou alors sauver le fichier en hash table (-i), mais le principe reste le meme.
Enfin bon, comme ca ete dis, si le fichier est gros, ca plantera, avec /filter, ca te prend une ligne et ca plantera pas :p
filter -tu 2 32 fichier.ini sortie.txt
il me semble que cela te mettra ds le fichier sortie.txt les lignes ds l'ordre, mais je suis pas sur du tout, -t 2 32 signifie qu'on trie par rapport au deuxieme token separe par un caractere 32, l'espace, et -u signifie un tri numerique, je regarderai plus en detail ce soir si tu n'as pas trouve :)
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 17 nov. 2008 à 13:24
Moi je ferais une boucle qui stocke tous les items inversés (exemple : 100 blabla au lieu de blabla 100) puis je les rangerais en triant numériquement dans l'ordre croissant (et retournerais cette même liste avec uniquement les 2èmes tokens).
Mais euh... l'algo dépend notamment du langage dans lequel tu fais ça. Or, tu n'as pas précisé...
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 17 nov. 2008 à 22:14
Wow, ton code, meme s'il utilise des trucs jolie, est vraiment bizarre, je comprend pas tout ce pre-traitement, si tu n'utilises que la ligne du /filter, il te retourne toute les lignes du fichier, mais avec les ligne contenant les = trie non ? je pense pas que tout ce que tu fasses soit necessaire, /filter devrait suffire, j'ai pas encore teste de le faire donc je sais pas trop.
cs_tofu
Messages postés1726Date d'inscriptionvendredi 12 septembre 2003StatutMembreDernière intervention13 juin 20091 17 nov. 2008 à 23:40
Une question surement idiote, mais pourquoi indexer par des clés du genre "test"/"test2"... dans le fichier INI, si au final tu veux trier en utilisant comme index la valeur numérique de la chaîne?
A la limite, ça vaudrait le coup d'organiser les données avec un fichier XML non? Si tu veux pouvoir organiser un peu comme tu veux, trier dans tous les sens etc Enfin je dis ça parce que actuellement je bosse sur un projet où j'ai centralisé mes données dans un tel fichier et c'est assez souple d'utilisation.
Alors après à voir si c'est pas trop galère à faire en sorte de récup les données avec du code mIRC mais bon, ça doit pas être sorcier surtout avec les regexp.
Enfin, disons qu'à mon sens (à juste titre ou non), j'ai l'impression que ton pb se situe plus dans la façon de pouvoir organiser les données de façon à pouvoir les trifouiller de façon simple, que de réaliser réellement une routine de tri...
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 18 nov. 2008 à 01:19
Bon bah comme prévus, en testant :
//filter -ctue 2 32 fichier.ini fichier.txt *=*
ça exclus les lignes des sections, ça prend que les lignes correspondant a item=value, et ça trie bien.
Après il y a moyen de faire ce que tu veux, de viré la partie avec le =, facilement, avec seulement une ligne de plus, pas besoin de tout ton mic mac :)
même si je déconseille l'usage d'un fichier xml, le dernier paragraphe de tofu est sans doute vrai, si tu expliquais un peu le but du truc, on pourrait mieux comprendre
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 18 nov. 2008 à 12:41
Je ne connaissais pas /filter (du moins pas assez pour savoir qu'elle faisait ça ^^)
En effet ça a l'air beaucoup plus simple.
Et oui comme le dis tofu, s'il y a moyen que tu organises ton fichier pour récupérer les données plus facilement, autant le faire.
Je pense que, si on a bien compris ton problème, le dernier message de wims devrait pouvoir le résoudre.
WorldDMT
Messages postés871Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 20121 18 nov. 2008 à 19:11
en effet j'ai posté un simple exemple pour avoir une idée de ce que je pourai avoir besoin mais bon
ce que je fait est different il y a plusieurs données dans le fichier et c'est un tri de chan par nombre de text, de join, ou nombre de chatteurs present ect. et ça va etre presenté dans une list dialog par ordre croissant selon le nombre demandé
donc il y aura une loop qui va classer les chan en ordre croissant ensuite je les didtok dans la list donc j'avais dis que $sorttok va m'aidé parceque je comptais faire une regex
donc les chan seront placé selon la demande (par text,join, ou autre..) quelquchose comme ça
%x = 150 #chan1|200 #chan2|50 #chan3|75 #chan4
ici $sorttok(%x,32,nr) va classé par ordre croissant ensuite on recupere rien que les chan pour les mettre dans la list
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 19 nov. 2008 à 13:34
Ah non mais présenté comme ça, ça n'a rien à voir. C'est beaucoup plus simple. Je reposte ce soir, car là je suis en cours, je te propose une méthode.
Evidemment je pense que d'autres commentaires viendront d'ici là.