Page 1 sur 2

JOKERS

Publié : dim. 24/août/2008 15:48
par Danydoc
Bonjour,

Je suis en train d'essayer une re transcription en PureBasic de procédures FTP listées dans des fichiers texte lancés par des procédures batch. Elles utilisent des caractères JOKER et sont fonctionnelles depuis plusieurs mois chez de nombreux utilisateurs.
Je n'ai rien trouvé dans l'aide sur l'utilisation de joker (* et ?) (ou Wild Car) dans les noms de fichiers.
D'où ma question : un fichier doit-il être nommément défini ou est-il possible de les regrouper par l'utilisation de ces caractères ?
Dans le second cas : quelles ont les éventuelles restrictions dans l'utilisation conjointe des deux ? (par exemple : abc* est-il équivalent à abc*d?)

Merci pour votre aide.
Bien cordialement,
Danydoc

Publié : dim. 24/août/2008 17:57
par djes
Ta question est bien trop vague... Les noms de fichiers en PB ne peuvent pas utiliser de jokers : normal puisque tu peux créer ces noms à partir du langage, à partir d'une boucle par exemple. Un batch est fait pour simplifier le traitement de fichiers; mais PB est un langage de programmation, par définition bien plus généraliste. A partir de PB, tu peux faire bien plus que ce que fait un batch, mais il faut le programmer. Ainsi, tu peux ouvrir autant de fichiers que tu le veux, leur appliquer des traitements indépendants, les concaténer etc.
C'est comme si tu voulais comparer PB avec un logiciel de dessin. Tu peux créer des dessins avec PB, tu peux créer le logiciel avec PB, mais ça demande des efforts! Enfin tu vois quoi.

Il y a des langages qui simplifie le traitement des fichiers. La plupart font partie de shells évolués (et sont donc programmables à partir de fichiers de commandes, des batchs si tu veux, enfin en unix on appelle plutôt ça des scripts). Ainsi Grep, Awk, Perl, Sed en font partie.

Tu peux aussi appeler n'importe quel programme à partir de PB, et donc te servir de ses fonctions. De même il y a des bibliothèques spécialisées, y compris dans le transfert de fichiers. Fais une recherche sur le forum, tu devrais trouver de quoi te renseigner.
Sur la dernière version du langage sont apparues (enfin) les expressions régulières. A partir d'elles (sortes de jokers), on peut relativement facilement faire ce que tu désires, mais là encore il faut les utiliser dans une boucle.

Publié : dim. 24/août/2008 18:46
par Ollivier
Comme MS-Dos ! A moins que je dise une bêtise. Je répondrai dans 2 heures...Cause no time...

Ollivier

Publié : dim. 24/août/2008 22:10
par lionel_om
Pas tout compris pour ta question sur les groupes de fichiers.
Mais les expressions régulières sont maintenant dispo dans PB !!! :D
Donc tu peux toujours t'en servir pour filtrer comme tu le veux après...

En espérant, ne pas être à côté de la plaque...
/Lio

JOKERS

Publié : jeu. 28/août/2008 9:55
par Danydoc
Merci djes, Ollivier et lionel_om !

Il est rassurant et satisfaisant pour les novices (dont je suis) d'avoir aussi rapidement des réponses.

J'ai pratiqué PERL, un peu, extrêmement concis pour le tri de lignes de texte selon des critères passés en paramètres. J'étais bien plus performant en Shell BOURNE sur des machines DEC sous UNIX. Maintenant, en batches, je ne pratique plus guère que le DOS.

Les expressions régulières constituent sans doute une réponse à ma question mais les exemples que j'ai pu trouver me laissent à penser que je n'ai peut-être pas bien tout compris. Ils semblent tester l'appartenance d'un caractère à un ensemble contigu de caractères ASCII comme [a-z] et [3-6]. Mais comment interpréter un caractère quelconque ?

Exemple : je recherche dans un répertoire tous les fichiers (sous-répertoires inclus) de moins de 256 caractères et dont le nom comporte le caractère b. Je sais que ces fichiers peuvent comporter tous les caractères alphabétiques (minuscules ou majuscules, accentués ou non) numériques, plus les quelques caractères spéciaux tolérés par Windows comme : l'espace, le tiret, le souligné ou le point.

Note : FTP (comme CMD.EXE et Command.COM de Windows) reconnait et interprète correctement *b*.* et répond au problème.

Cordialement,
Danydoc

Publié : jeu. 28/août/2008 10:35
par Ar-S
Salut,

Est-ce les commandes : GetFilePart et Findstring ne te suffiraient pas ?

Avec ce petit code ma boucle lit les caractères du nom de fichier puis les compare avec le caractere recherché.. C'est pas ce que tu cherches à faire ?

Code : Tout sélectionner

Question$ = InputRequester("InputRequester","Entrez le caractere recherché : ","")
If Question$
  
  Position=1
  NomFichier$="tomateclafouti_orteille.exe" ; imaginons que c'est le nom de ton 1er fichier
  LongueurFichier=Len(NomFichier$)
  
  For i = 1 To LongueurFichier
    CarLu$=Mid(NomFichier$,Position,1)
    If CarLu$=Question$
      Debug "Trouvé, Le fichier : " +NomFichier$+" contient Le caractère : "+Question$
      Break ; Ici si tel est le cas tu fais lire le fichier suivant etc...)
    Else
      Debug "Non  Le fichier : "+NomFichier$+" ne contient pas Le caractere : "+Question$
    EndIf  
    Position=Position+1
    
  Next i
  
Else
  MessageRequester ("Annulé","Annulé")
EndIf
MessageRequester ("Bye","Bye")
End

Publié : jeu. 28/août/2008 10:47
par djes
Sinon le plus simple est fourni par l'exemple d'examinedirectory, où il n'y a qu'à changer le filtre :

Code : Tout sélectionner

  Directory$ = "C:\"   ; Énumère le contenu du répertoire C (Les sous-répertoires ne sont pas examinés) 
  If ExamineDirectory(0, Directory$, "*.*")  
    While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
        Type$ = " [Fichier] "
      Else
        Type$ = " [Sous-répertoire] "
      EndIf
      
      Debug DirectoryEntryName(0) + Type$ + "- Taille en octet : " + Str(DirectoryEntrySize(0))
    Wend
    FinishDirectory(0)
  EndIf
Après avoir récupéré la chaîne (DirectoryEntryName(0) ), tu peux la traiter avec des expressions régulières, vérifier la taille du nom, etc.

JOKERS

Publié : dim. 31/août/2008 10:44
par Danydoc
Merci Ar-s et djes !

Voici à quoi m'ont conduit votre aide :

Cherchant à connaître les limites du caractère * utilisé dans le filtre passé en paramètre à ExamineDirectory(), j'ai vu qu'elles n'étaient pas limitées à l'exemple lui-même et pouvaient dans une certaine mesure répondre à mon problème. Mais l'interprétation que cette fonction en fait est surprenante et parait, au premier abord, aléatoire !!
C'est ainsi que l'utilisation du Joker ? conduit au résultat attendu alors que son remplacement par * est complètement différent de ceux de windows.

Ceci est avéré dans une liste d'un millier de fichiers avec les filtres *a?b*.* et *a*b*.* .
Le ? est bien compris comme un caractère quelconque.
Le * qui le remplace conduit à la même interprétation que le filtre *a*.* : le caractère b n'est plus recherché !

Il me reste donc à utiliser cette fonction en utilisant au mieux les caractéristiques qui lui sont propres. Il est regrettable qu'une fonction aussi riche soit aussi peu documentée !!

Bien cordialement,
Danydoc.

Publié : dim. 31/août/2008 21:11
par djes
Je n'ai pas vraiment bien lu :oops: , mais sur windows (enfin, c'était comme ça sous DOS), le * ne fonctionne qu'à la fin, pas au début d'un mot.

JOKERS

Publié : lun. 01/sept./2008 10:18
par Danydoc
Bonjour djes,

Ce que vous dites était vrai des premiers DOS et c'est pour cette raison (entr'autres) que je préférais à celui de Microsoft, celui de Norton (NDos) ou de Dec (DRDos) ; mais il s'est amélioré ensuite avant même la toute dernière version ayant servi d'operating system de base à Win98 (déjà connu avec le N° 6.22)

La commande DOS dir *a*.exe > _a_.txt génère une liste de 45 fichiers. Tous comportent un a au moins dans leur nom.
Voici, entre 2 lignes de tirets, le contenu de ce fichier _a_.txt :
____________________________________________________________
Le volume dans le lecteur D s'appelle Part2
Le numéro de série du volume est C861-7946

Répertoire de D:\LIBRAIRE

22/07/2008 11:02 444 478 ACHATMLP.EXE
30/10/2003 10:04 227 018 ADKSDAYS.EXE
04/08/2005 17:32 253 544 ADKSJOUR.EXE
14/04/2007 20:01 288 658 ARBL.EXE
18/07/2007 18:09 492 916 ARDOISES.EXE
01/03/2008 16:08 303 448 ARTMLP.EXE
14/10/2007 05:29 300 632 ARTNMPP.EXE
01/12/2001 13:20 341 844 BONTABAC.EXE
15/02/2008 18:13 491 314 CAISSFIN.EXE
16/12/2005 16:48 236 368 CLRRAYON.EXE
05/09/2007 01:01 52 224 cmdansie.exe
25/05/2008 10:10 504 286 CMDTABAC.EXE
30/06/2006 19:00 492 650 CMDTABAC.EXE_old
16/06/2006 16:56 230 138 CORCLASS.EXE
14/06/2006 23:32 248 602 CORRAYON.EXE
10/03/2008 21:48 204 252 DLOADMLP.EXE
09/08/2004 05:40 473 088 editpad.EXE
09/08/2004 05:40 473 088 EDITPADL.EXE
20/09/2002 00:09 5 648 EPURATO.EXE
06/07/1996 20:06 5 696 EPURTABA.EXE
01/10/1988 16:08 7 586 ESCAN.EXE
21/03/2002 20:19 180 606 FichierART.exe
17/11/2007 19:49 196 282 GARDEFOU.EXE
19/07/2007 17:21 669 332 HAVENTEU.EXE
18/03/2002 15:01 822 121 Install Client ART-RAS.exe
05/01/1980 12:18 34 283 LHA.EXE
24/03/2008 11:06 1 169 804 LIBRAIRE.EXE
05/05/2008 11:56 546 342 LINEAIRB.EXE
05/03/2008 19:15 566 278 LINEAIRE.EXE
28/07/2007 10:44 248 922 MAJGENRE.EXE
15/06/2006 19:47 245 984 majgenrf.exe
23/12/2002 12:59 254 922 MAJPXTBC.EXE
25/12/2003 19:02 255 146 MAJTABAC.EXE
05/05/1999 23:22 348 160 MSPAINT.EXE
28/04/2007 11:08 71 074 NewData.exe
09/08/2004 03:40 473 088 ODITPAD.EXE
05/09/2007 02:01 52 224 OEM2ANSI.EXE
01/07/1991 11:00 255 871 QBASIC.EXE
04/12/2001 20:13 276 634 RAZSTOCK.EXE
10/11/2007 19:29 617 634 RECLAMES.EXE
23/04/2008 08:07 412 970 RECLAMNU.EXE
22/05/2008 16:26 252 342 SEARCHAR.EXE
11/03/2002 14:07 375 985 Setup-AutoTr14.exe
27/07/2007 19:28 618 380 TABACMNU.EXE
19/01/2008 12:03 5 568 WAITNGO.EXE
45 fichier(s) 15 027 430 octets
0 Rép(s) 10 073 968 640 octets libres
________________________________________________________

La commande DOS dir *a*b*.exe > _a_b_.txt réduit cette liste à 8 fichiers : Ceux qui comportent aussi dans leur nom au moins un b suivant le a.
Voici, entre 2 lignes de tirets, le contenu de ce fichier _a_.txt :
____________________________________________________________
Le volume dans le lecteur D s'appelle Part2
Le numéro de série du volume est C861-7946

Répertoire de D:\LIBRAIRE

14/04/2007 20:01 288 658 ARBL.EXE
01/12/2001 13:20 341 844 BONTABAC.EXE
25/05/2008 10:10 504 286 CMDTABAC.EXE
30/06/2006 19:00 492 650 CMDTABAC.EXE_old
06/07/1996 20:06 5 696 EPURTABA.EXE
05/05/2008 11:56 546 342 LINEAIRB.EXE
23/12/2002 12:59 254 922 MAJPXTBC.EXE
25/12/2003 19:02 255 146 MAJTABAC.EXE
27/07/2007 19:28 618 380 TABACMNU.EXE
9 fichier(s) 3 307 924 octets
0 Rép(s) 10 073 972 736 octets libres
___________________________________________________________

Tous mes remerciements encore pour votre aide.
Cordialement,
Danydoc

Publié : lun. 01/sept./2008 10:36
par djes
Merci du rappel :)
Il y a beaucoup de petites astuces dans les CLI; la console de windows est très différente du DOS et en recelle aussi une grande quantité; un regret, on ne peut utiliser l'ANSI nativement, qui était sympa pour épater les copains ;)

PS: le tabac, c'est pas bon pour la santé, ça contient plein de polonium http://news.google.fr/news?q=tabac&cr=c ... a=N&tab=wn :lol:

JOKERS

Publié : lun. 01/sept./2008 14:52
par Danydoc
Merci, djes, de me préciser CLI : Console ..... ?

On retrouve dans le CMD.EXE tout ce qui existait dans le COMMAND.COM du DOS, souvent en mieux, et bien d'autres choses encore que j'ai vues, mais laissées faute d'en avoir besoin.

Certains éditeurs de texte permettent des conversions en ANSI (je conseille souvent EditPad, gratuit en version lite, équivalent en qualité au Bloc-Notes du XP de Coccinelle).
OK sur la nocivité du tabac, très largement diminuée avec le tabac brut !.. Certains cigares, pour les digestions longues des repas très caloriques des jours de fêtes, sont cependant pour moi d'une rare volupté : moins de 5 par an.
Par contre, je fuis l'alcool (même soi-disant indétectable) autant que l'éther. Ce sont pour moi 2 produits chimiques équivalents.

Je suis aussi débutant en forum ; est-il possible de transmettre une pièce jointe (image ou fichier texte) ? Si oui, quelles sont les limites (nombre, tailles, ..). C'est le bouton Img qui m'y fait penser. Des neuf boutons présents, je ne comprend que les 4 premiers.
Cordialement,
Danydoc

Publié : lun. 01/sept./2008 15:23
par Ar-S
Pour héberger des images tu peux utiliser http://imageshack.us/
pour ce qui est des fichiers, moi j'utilise un espace perso... mais y'a des hebergeurs de fichiers aussi comme rapidshare.com etc...
tape "hébergeur de fichier" dans google, tu trouveras ton bonheur.

Re: JOKERS

Publié : lun. 01/sept./2008 16:03
par djes
Danydoc a écrit :Merci, djes, de me préciser CLI : Console ..... ?

On retrouve dans le CMD.EXE tout ce qui existait dans le COMMAND.COM du DOS, souvent en mieux, et bien d'autres choses encore que j'ai vues, mais laissées faute d'en avoir besoin.

Certains éditeurs de texte permettent des conversions en ANSI (je conseille souvent EditPad, gratuit en version lite, équivalent en qualité au Bloc-Notes du XP de Coccinelle).
OK sur la nocivité du tabac, très largement diminuée avec le tabac brut !.. Certains cigares, pour les digestions longues des repas très caloriques des jours de fêtes, sont cependant pour moi d'une rare volupté : moins de 5 par an.
Par contre, je fuis l'alcool (même soi-disant indétectable) autant que l'éther. Ce sont pour moi 2 produits chimiques équivalents.

Je suis aussi débutant en forum ; est-il possible de transmettre une pièce jointe (image ou fichier texte) ? Si oui, quelles sont les limites (nombre, tailles, ..). C'est le bouton Img qui m'y fait penser. Des neuf boutons présents, je ne comprend que les 4 premiers.
Cordialement,
Danydoc
CLI ou Command Line Interface : interface en ligne de commande, pour parler du DOS qui pour moi n'est pas vraiment un shell ;)

Je ne connais pas les cigares, mais à voir le plaisir des amateurs, ça semble avoir un certain intérêt surtout si l'on sait, comme toi, ne pas devenir dépendant. Pour l'instant, je n'en connais que le parfum qui parfois, je dois le reconnaître, est assez agréable. Quant à l'alcool, j'en fais une consommation modérée, surtout depuis quelques temps, même s'il est facile de tomber dans le piège du faux antidépresseur qu'il représente.

Pour envoyer une image, la réponse d'Ar-S est bonne, que je complèterais par le service http://dl.free.fr pour envoyer de gros fichiers de façon temporaire.

Publié : lun. 01/sept./2008 16:08
par Ar-S
djes a écrit :Je n'ai pas vraiment bien lu :oops: , mais sur windows (enfin, c'était comme ça sous DOS), le * ne fonctionne qu'à la fin, pas au début d'un mot.
Ba si, lorsque tu fais une recherche windows (F3) tu peux très bien faire
*bob*.mp3 pour rechercher les fichier marleybob_1.mp3, Dylanbobtrack4.mp3