Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Recherche de chaînes de caractères : FINDSTR | |
| | Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Recherche de chaînes de caractères : FINDSTR Sam 3 Déc 2016 - 20:50 | |
| Recherche de chaînes de caractères dans les fichiers à l aide de la commande "FINDSTR" de la ligne de commande. Vous pouvez télécharger la liste de 22740 mots utilisée par le code sur ce lienTout est expliqué dans le code. Taper dans l'EDIT la (les) première(s) lettre(s) et ... remarquez la rapidité du traitement ! - Code:
-
rem ============================================================================ rem Recherche de chaînes de caractères dans les fichiers. rem à l aide de la commande "FINDSTR" de la ligne de commande rem ============================================================================ rem Syntaxe : rem FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] rem [/F:fichier] [/C:chaîne] [/G:fichier] [/D:liste de répertoires] rem [/A:attributs de couleur] [chaînes] rem [[lecteur:][chemin]nom de fichier[ ...]] rem ============================================================================ rem /B Recherche l élément si il est en début de ligne. rem /E Recherche l élément si il est en fin de ligne. rem /L Recherche les chaînes littéralement. rem /R Recherche les chaînes en tant qu expressions. rem /S Recherche les fichiers correspondants dans le répertoire actif rem et dans tous ses sous-répertoires. rem /I Spécifie que la recherche ne doit pas tenir compte de la casse. rem /X Affiche les lignes correspondant parfaitement. rem /V N affiche que les lignes non correspondantes. rem /N Affiche le numéro de ligne devant chaque ligne correspondante. rem /M Affiche uniquement le nom des fichiers contenant des chaînes rem correspondantes. rem /O Affiche le décalage des caractères pour chaque ligne rem correspondante. rem /P Ignore les fichiers ne contenant pas de caractères affichables. rem /OFFLINE Ne pas ignorer les fichiers dont l attribut hors connexion a été réglé. rem /A:attr Spécifie l attribut de couleur avec 2 chiffres hexadécimaux. rem Entrez "color /?". rem /F:fichier Lit la liste des fichiers dans le fichier spécifié (/ pour la rem console). rem /C:chaîne Recherche la chaîne spécifiée littéralement. rem /G:fichier Obtient les chaînes à rechercher à partir du fichier spécifié rem (/ pour la console). rem /D:rép Recherche dans une liste de répertoires délimitée par des rem points-virgules. rem chaînes Chaînes à rechercher. rem [lecteur:][chemin]nom de fichier rem Spécifie les fichiers dans lesquels effectuer la recherche. rem ============================================================================ rem Utilisez des espaces pour séparer plusieurs chaînes à rechercher, sauf si rem l argument est précédé de /C. rem Exemple : rem FINDSTR "bonne journée" x.y <--- recherche "bonne" ou "journée" dans le fichier x.y rem FINDSTR /C:"bonne journée" x.y <--- recherche "bonne journée" dans le fichier x.y rem ============================================================================ ' ============================================================================== rem Le code suivant cherche les mots qui commencent par la (ou les) lettre(s) rem tapée(s) dans un EDIT. rem La recherche se fait dans un fichier texte contenant 22740 mots de la langue française. rem Remarquez la rapidité du traitement ! rem Le résultat est instantanné. ' ============================================================================== rem ============================================================================ label findstr dim p,l,t$,dico$ dico$ = "c:\users\acer\desktop\liste_francais.txt" : ' 22 740 mots ' à télecharger sur : ' http://www.freelang.com/dictionnaire/dic-francais.php EDIT 10 : WIDTH 10,200 : set_focus 10 : ON_CHANGE 10,findstr memo 20 : HIDE 20 : TOP 20,40 : WIDTH 20,200 : HEIGHT 20,400 : bar_both 20 COLOR 20,250,200,100
end rem ============================================================================ Findstr: clear 20 t$ = text$(10) execute_wait "cmd /c findstr /b /i " + chr$(34) + t$ + chr$(34) + " " + dico$ + "|clip" item_add 20, clipboard_string_paste$ : show 20 return rem ============================================================================
@Minibug Si ça peut te servir dans ta "saisie prédictive" , sers-toi
Dernière édition par papydall le Dim 4 Déc 2016 - 12:56, édité 1 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re Sam 3 Déc 2016 - 21:10 | |
| Ne devrait on pas parler de saisie intuitive plutôt ? Avec " prédictive ", je m attends a voir apparaitre Madame Irma à n importe quel moment... | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Findstr. Sam 3 Déc 2016 - 21:25 | |
| Bonsoir à tous.
Je viens de tester la commande DOS Findstr, afin de rechercher des mots dans mon dico français-anglais.
En effet, la vitesse de recherche est très rapide, peut-être même plus rapide que la commande Search de l'objet StringList.
Mais un problème se pose: elle ne permet pas d'afficher correctement les caractères accentués dans l'objet Edit !! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Recherche de chaînes de caractères : FINDSTR Dim 4 Déc 2016 - 3:07 | |
| - Pedro alvarez a écrit:
Mais un problème se pose: elle ne permet pas d'afficher correctement les caractères accentués dans l'objet Edit !!
Voici une solution qui permet d'afficher correctement les caractères accentués. Le résultat est acceptable du point de vue temps d’exécution si la liste n’est pas trop longue ! - Code:
-
rem ============================================================================ rem Recherche de chaînes de caractères dans les fichiers. rem à l aide de la commande "FINDSTR" de la ligne de commande rem ============================================================================ rem Syntaxe : rem FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] rem [/F:fichier] [/C:chaîne] [/G:fichier] [/D:liste de répertoires] rem [/A:attributs de couleur] [chaînes] rem [[lecteur:][chemin]nom de fichier[ ...]] rem ============================================================================ rem /B Recherche l élément si il est en début de ligne. rem /E Recherche l élément si il est en fin de ligne. rem /L Recherche les chaînes littéralement. rem /R Recherche les chaînes en tant qu expressions. rem /S Recherche les fichiers correspondants dans le répertoire actif rem et dans tous ses sous-répertoires. rem /I Spécifie que la recherche ne doit pas tenir compte de la casse. rem /X Affiche les lignes correspondant parfaitement. rem /V N affiche que les lignes non correspondantes. rem /N Affiche le numéro de ligne devant chaque ligne correspondante. rem /M Affiche uniquement le nom des fichiers contenant des chaînes rem correspondantes. rem /O Affiche le décalage des caractères pour chaque ligne rem correspondante. rem /P Ignore les fichiers ne contenant pas de caractères affichables. rem /OFFLINE Ne pas ignorer les fichiers dont l attribut hors connexion a été réglé. rem /A:attr Spécifie l attribut de couleur avec 2 chiffres hexadécimaux. rem Entrez "color /?". rem /F:fichier Lit la liste des fichiers dans le fichier spécifié (/ pour la rem console). rem /C:chaîne Recherche la chaîne spécifiée littéralement. rem /G:fichier Obtient les chaînes à rechercher à partir du fichier spécifié rem (/ pour la console). rem /D:rép Recherche dans une liste de répertoires délimitée par des rem points-virgules. rem chaînes Chaînes à rechercher. rem [lecteur:][chemin]nom de fichier rem Spécifie les fichiers dans lesquels effectuer la recherche. rem ============================================================================ rem Utilisez des espaces pour séparer plusieurs chaînes à rechercher, sauf si rem l argument est précédé de /C. rem Exemple : rem FINDSTR "bonne journée" x.y <--- recherche "bonne" ou "journée" dans le fichier x.y rem FINDSTR /C:"bonne journée" x.y <--- recherche "bonne journée" dans le fichier x.y rem ============================================================================ ' ============================================================================== rem Le code suivant cherche les mots qui commencent par la (ou les) lettre(s) rem tapée(s) dans un EDIT. rem La recherche se fait dans un fichier texte contenant 22740 mots de la langue française. rem Remarquez la rapidité du traitement ! rem Le résultat est instantanné. ' ============================================================================== rem ============================================================================ label findstr dim i,t$,dico$ dim ansi$(256) dico$ = "c:\users\acer\desktop\liste_francais.txt" : ' 22 740 mots ' à télecharger sur : ' http://www.freelang.com/dictionnaire/dic-francais.php EDIT 10 : WIDTH 10,200 : set_focus 10 : ON_CHANGE 10,findstr memo 20 : HIDE 20 : TOP 20,40 : WIDTH 20,200 : HEIGHT 20,400 : bar_both 20 COLOR 20,250,200,100 for i = 0 to 255 : read ansi$(i) : next i
end rem ============================================================================ Findstr: clear 20 t$ = text$(10) if len(t$) < 2 then return execute_wait "cmd /c findstr /b /i " + chr$(34) + t$ + chr$(34) + " " + dico$ + "|clip" AnsiToOem(clipboard_string_paste$) return rem ============================================================================ SUB AnsiToOem(c$) dim_local OldLine$, NewLine$, OldC, NewC$, i OldLine$ = c$ : NewLine$ = "" for i = 1 to len(OldLine$) Oldc = asc(mid$(OldLine$,i,1)) NewLine$ = NewLine$ + chr$(hex(ansi$(oldc))) next i item_add 20, NewLine$ : show 20 END_SUB rem ============================================================================ data "00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F" data "10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F" data "20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F" data "30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F" data "40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F" data "50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F" data "60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F" data "70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F" data "5F","5F","27","9F","22","2E","C5","CE","5E","25","53","3C","4F","5F","5A","5F" data "5F","27","27","22","22","07","2D","2D","7E","54","73","3E","6F","5F","7A","59" data "FF","AD","BD","9C","CF","BE","DD","F5","F9","B8","A6","AE","AA","F0","A9","EE" data "F8","F1","FD","FC","EF","E6","F4","FA","F7","FB","A7","AF","AC","AB","F3","A8" data "B7","B5","B6","C7","8E","8F","92","80","D4","90","D2","D3","DE","D6","D7","D8" data "D1","A5","E3","E0","E2","E5","99","9E","9D","EB","E9","EA","9A","ED","E8","E1" data "85","A0","83","C6","84","86","91","87","8A","82","88","89","8D","A1","8C","8B" data "D0","A4","95","A2","93","E4","94","F6","9B","97","A3","96","81","EC","E7","98" rem ============================================================================
| |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Findstr. Dim 4 Déc 2016 - 8:16 | |
| Bonjour à tous.
Merci Papydall.
Mais la nouvelle routine bloque le programme, lorsque la liste à traiter est un peu trop longue. Cela est dû au 'on_change'.
Désolé.
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Recherche de chaînes de caractères : FINDSTR Dim 4 Déc 2016 - 12:27 | |
| Bonjour Papydall C'est juste SUPER !! Je n'avais pas eu le temps de regarder hier soir, étant absent. C'est effectivement très rapide vu le nombre de mots ! Juste cette contrainte de la fenêtre dos à faire disparaître. Il me semble qu'il y a une solution qui a déjà était donnée... Merci et Bravo pour cette excellente astuce qui risque d'avoir de nombreuses utilisations ! PS : je pense qu'au lieu de Mindstorm tu voulais dire Minibug ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Recherche de chaînes de caractères : FINDSTR Dim 4 Déc 2016 - 13:06 | |
| - Minibug a écrit:
- PS : je pense qu'au lieu de Mindstorm tu voulais dire Minibug !
C’est juste ! Que veux-tu que je fasse entre la tempête (storm) et l’insecte (bug) ? Ok ! je vais sortir mais pas avant de te dire que notre talentueux JL35 a posté (qui cherche trouve) une astuce pour faire disparaître la furtive fenêtre en noir. EDIT : J'ai "minibugué" l'"esprit de tempête" là-haut !!!! | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Recherche de chaînes de caractères : FINDSTR Dim 4 Déc 2016 - 13:15 | |
| J'ai retrouver dans ce post un script de JL35 qui évite l'affichage de la fenêtre DOS. J'essaie de l'insérer dans le programme de Papydall mais sans résultat ! J'ai l'impression que le problème se situe dans le contenu du presse papier. Voici le sous_programme de Papydall à la base modifier avec les infos de la sub de JL35 : - Code:
-
Findstr:
clear 20 t$ = text$(10)
pr$ = "cmd /c findstr /b /i " + chr$(34) + t$ + chr$(34) + " " + dico$ + "|clip"
' Exécution d'un programme externe sans la fenêtre noire Ms-DOS
scr$ = "C:\TEMP\Vbscript.vbs" bat$ = "C:\TEMP\Bat.bat" qu$ = CHR$(34) ' ===== Création du fichier .bat FILE_OPEN_WRITE 90, bat$: FILE_WRITELN 90, pr$ : FILE_CLOSE 90 ' ===== Création du script .vbs FILE_OPEN_WRITE 90, scr$ FILE_WRITELN 90, "CreateObject("+qu$+"Wscript.Shell"+qu$+").Run "+qu$+bat$+qu$+",0,True" FILE_CLOSE 90 ' ===== Exécution du script EXECUTE_WAIT "WSCRIPT.exe "+scr$
item_add 20, clipboard_string_paste$ : show 20
FILE_DELETE bat$: FILE_DELETE scr$
return PS : Avant l'execution pensez à rajouter les variables suivantes : scr$ , qu$ , pr$ , bat$ @Papydall : on s'est croisé ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Recherche de chaînes de caractères : FINDSTR Dim 4 Déc 2016 - 14:31 | |
| @Minibug, Dans ton exemple, mets un espace entre dico$ et '|clip', ça ira mieux. Par exemple, pour trouver la version de Panoramic_Editor actuellement en service: - Code:
-
DIM t$,f$ f$ = "C:\Program Files (x86)\Panoramic Editor\PANORAMIC_EDITOR.exe" t$ = "PANORAMIC Version" Findstr(t$,f$) MESSAGE clipboard_string_paste$ END
SUB Findstr(txt$,f$) ' Recherche de la chaîne txt$ dans le fichier f$ DIM_LOCAL scr$,bat$,q$ scr$ = "C:\TEMP\\Scr.vbs": bat$ = "C:\TEMP\\Bat.bat" q$ = CHR$(34) FILE_OPEN_WRITE 9,bat$ FILE_WRITELN 9,"cmd.exe /c FIND "+q$+txt$+q$+" "+q$+f$+q$+" | clip" FILE_CLOSE 9 FILE_OPEN_WRITE 9, scr$ FILE_WRITELN 9, "CreateObject("+q$+"Wscript.Shell"+q$+").Run "+q$+bat$+q$+",0,True" FILE_CLOSE 9 EXECUTE_WAIT "WSCRIPT.exe "+scr$ FILE_DELETE bat$: FILE_DELETE scr$ END_SUB là on utilise FIND, pas FINDSTR. Mais FIND marche pour rechercher une chaîne de caractères Ascii noyée dans un fichier binaire. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Recherche de chaînes de caractères : FINDSTR Dim 4 Déc 2016 - 15:48 | |
| Bonjour JL35 J'ai suivi ton conseil et ça fonctionne parfaitement. Par contre dans le post tu donne un second exemple où l'on se passe du fichier 'bat' Mais là ça ne fonctionne pas ou plutôt je n'ai pas réussi à le mettre en œuvre. J'ai remplacé les CHR$(34) de la chaîne de Papydall par qu$ mais rien à faire. Il y a sûrement une erreur quelque part... - Code:
-
Findstr:
clear 20 t$ = text$(10) qu$ = CHR$(34)
pr$ = "cmd /c findstr /b /i " + qu$ + t$ + qu$ + " " + dico$ + " |clip" scr$ = "C:\temp\Vbscript.vbs"
FILE_OPEN_WRITE 90, scr$ FILE_WRITELN 90, "CreateObject("+qu$+"Wscript.Shell"+qu$+").Run "+qu$+pr$+qu$+",0,True" FILE_CLOSE 90 EXECUTE_WAIT "WSCRIPT.exe "+scr$
item_add 20, clipboard_string_paste$ : show 20
FILE_DELETE scr$
return
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Recherche de chaînes de caractères : FINDSTR Dim 4 Déc 2016 - 15:59 | |
| Ca y est je viens de trouver ! En retirant les CHR$(34) de la chaîne de Papydall, cela fonctionne.
J'ai donc la chaîne suivant : pr$ = "cmd /c findstr /b /i " + t$ + " " + dico$ + " |clip"
Encore merci à tous. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Recherche de chaînes de caractères : FINDSTR Dim 4 Déc 2016 - 17:09 | |
| - L’instruction FIND:
Recherche une chaîne de texte dans un ou des fichiers.
Syntaxe :
FIND [/V] [/C] [/N] [/I][/OFF[LINE]] "chaîne" [[lecteur:][chemin]nom_de_fichier[...]]
/V Affiche toutes les lignes ne contenant pas la chaîne spécifiée. /C Affiche seulement le nombre de lignes contenant la chaîne. /N Affiche les numéros de ligne avec les lignes affichées. /I Ignore la casse lors de la recherche de la chaîne. /OFF[LINE] Ne pas ignorer les fichiers dont l'attribut hors connexion a été réglé. "chaîne" Spécifie la chaîne de texte à trouver. [lecteur:][chemin]nom_de_fichier Spécifie un ou des fichiers pour la recherche.
Sans nom de chemin, FIND recherche le texte entré à l'invite ou redirigé depuis une autre commande.
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Recherche de chaînes de caractères : FINDSTR Dim 4 Déc 2016 - 17:29 | |
| @Minibug, Ton astuce d'enlever les Chr$(34) de la chaîne de papydall ça risque fort de ne pas marcher si t$ ou dico$ contiennent des espaces...
Remarque: dans mon exemple ci-dessus il y a des '\\' doublés intempestifs | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Recherche de chaînes de caractères : FINDSTR Dim 4 Déc 2016 - 17:54 | |
| Aucun risque puisqu'il s'agit des mots clé. L'espace devrai permettre la remise à zéro de la chaîne à rechercher. Mais je garde le conseil au cas où... Merci | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Recherche de chaînes de caractères : FINDSTR Lun 5 Déc 2016 - 15:22 | |
| Pour afficher les lettres accentuées, je propose deux solutions avec leurs avantages et inconvénients : 1) On change le code page de l’invite de commande dans l’instruction Panoramic execute_wait qui deviendra : - Code:
-
execute_wait "cmd /c chcp 1252 & findstr /b /i " + chr$(34) + t$ + chr$(34) + " " + dico$ + "|clip"
Le code page 1252 affiche bien les lettres accentuées, mais la recherche avec FINDSTR s’arrête à la 1ère lettre accentuée. 2) Au lieu de rediriger la sortie de la commande FINSTR vers le CLIP, on envoie la sortie vers un fichier texte - Code:
-
execute_wait "cmd /c findstr /b /i " + chr$(34) + t$ + chr$(34) + " " + dico$ + " > " + dest$
Avec , par exemple - Code:
-
Dim dest$ dest$ = "c:\users\acer\desktop\recherche.txt"
Il faut ensuite lire le fichier texte dest$ - Code:
-
Dim lig$
file_open_read 30,dest$ while file_eof(30) <> 1 file_readln 30,lig$ item_add 20, lig$ end_while
| |
| | | Contenu sponsorisé
| Sujet: Re: Recherche de chaînes de caractères : FINDSTR | |
| |
| | | | Recherche de chaînes de caractères : FINDSTR | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |