Recherche partielle de fichiers

phpmysql2007 Messages postés 19 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 4 décembre 2011 - 23 févr. 2008 à 14:53
 sleepless_2101 - 25 mars 2008 à 19:24
salut
j'aimerais savoir si c'est possible de faire une recherche

partielle de fichiers avec java script exemple : chercher ab*.txt
Merci

27 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
23 févr. 2008 à 15:05
Bonjour,

    en javascript.... on parle de fichiers en local donc... sur le micro client !!!

    avec Internet Explorer ( avec les autres navigateurs ça va être
       moins simple, voire impossible pour certains )

        FileSystemObject
ou    CommonDialog

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
phpmysql2007 Messages postés 19 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 4 décembre 2011
23 févr. 2008 à 15:17
Merci encore
J'ai essayer avec [codes/SUPPORTS-REPERTOIRES-FICHIERS-ETJAVASCRIPT_18981.aspx FileSystemObject] mais le probleme est qu'il ne comprend pas le "*"
comme en dos :chercher ab*.jpg;
je coince à ce niveau, je sais chercher tous les fichier avec getfolder(dossier) mais pas une partie
[codes/SUPPORTS-REPERTOIRES-FICHIERS-ETJAVASCRIPT_18981.aspx
]
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
23 févr. 2008 à 15:40
comment tu fais cela ?      je parle du * ?
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
phpmysql2007 Messages postés 19 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 4 décembre 2011
23 févr. 2008 à 16:31
Mais je ne sais pas, je me suis mal exprimé, pardon
justement c'est là où je coince.
la sollution que j'ai trouvé est :
après
function TrouverFichier(dossier)
{
    var f, ff=""
    f = fso.GetFolder(dossier)
    ff = new Enumerator(f.files);
    for(; !ff.atEnd(); ff.moveNext())
    {
        files += ff.item()+"\n";
    }
    return files;   
}
je fait un split sur le files: Fichier=files.split(dossier);
après
if(Fichier[i].substring(1,3).toUpperCase()==AB)  j'affiche
 Mais c'est trèe long

donc je cherche un moyen pour chercher directement que les AB*.txt
et sans les commndialogue
Cordialement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
23 févr. 2008 à 18:26
déjà traite les au fur et à mesure, dans la boucle...
plutôt que de mémoriser, puis split, puis traitement en fin,
    ça fait une boucle de moins.
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
phpmysql2007 Messages postés 19 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 4 décembre 2011
23 févr. 2008 à 20:59
je vais essayé et te tiendrai au courant


c’est que des fois j’ai 2000 fichiers



A+
0
phpmysql2007 Messages postés 19 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 4 décembre 2011
23 févr. 2008 à 22:50
Voilà, j’ai essayé,

Je gagne une boucle, mais pas beaucoup de temps!! C’est toujours très long

c'est que des fois j'ai 2000 fichiers  
je ne sais pas s'il y a une autre sollution?
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
24 févr. 2008 à 08:47
ça dépend de ce que tu dois faire de ces fichiers.

on pourrait faire excuter un dir ab*.jpg
       et récupérer/traiter la réponse   par exemple
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
phpmysql2007 Messages postés 19 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 4 décembre 2011
24 févr. 2008 à 14:56
Salut,
Oui, normalement c'est que je veux faire, pour créer une liste avec les noms des fichiers
c'est possible?, comment??
peut-être je ne suis pas sur le bon chemin.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
24 févr. 2008 à 17:00
    var w = new ActiveXObject("WScript.Shell");

    puis
soit tu fais le dir vers un fichier que tu réétudieras
    w.run ('cmd /c dir *.* >txt.tmp');
soit tu choppes directement la réponse
    un exemple, ici
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
phpmysql2007 Messages postés 19 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 4 décembre 2011
24 févr. 2008 à 23:39
Je suis sur la bonne voie, Merci pour le tuyau

une Fois terminer je te tiendrais au courant

Merci encore une autre fois
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 févr. 2008 à 07:44
il faudra peut-être aussi regarder comment cette "liste" est faite...
eviter d'utiliser innerHTML par exemple !
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
phpmysql2007 Messages postés 19 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 4 décembre 2011
25 févr. 2008 à 18:32
je fait le dir:
w.run("%comspec% /c  dir AB*.jpg /B> txt.tmp ",0 );
le 0 pour une execution en arrière plan
après le lit le fichier
apès je fait un split pour recuperer nomfichier
Je fait une liste dynamique,
document.write('<FORM name="XXXX">');
document.write('<SELECT id="select" NAME="Liste" SIZE="10" style="width:80">');
   
    for(var i=0; i<nomdufichier.length; i++)
    {
        var NombreCaractere=NomFichier[i].length;
        var NomAffiche = NomFichier[i].substring(1,NombreCaractere-4);//pour recuperer le nom san extention
      
        
               document.write('<OPTION selected VALUE='+nomdufichier+'>'+ nomdufichier);
              
       }

            document.write('</SELECT></FORM>');   
            window.focus();// pou mettre le focus sur la liste je suis obligé de faire ça
        document.getElementById("select").focus();   
 }

Le problème maintenant est que la liste ne s'affiche pas de suite sauf si je fait un alert()
comme si la fonction lire se passe avant le dir
et quant je fait un alert("toto") ça marche normalement !!!!puisque le declenchement de lire vient après la validation de l'alerte
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
26 févr. 2008 à 10:50
si on était en Visual Basic ( par exemple ), je te dirais
    fait un DoEvents dans la boucle   ;o)
en javascript... il faudrait "ralentir"
    paradoxal n'est-il pas ?
    remplacer la boucle for par un setTimeOut sur u while... par exemple
j'éviterais aussi les document.write ( mais plus par goût qu'autre chose ? )
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
26 févr. 2008 à 14:52
je ne sais pas si j'ai été clair....

au lieu de

    <select id="sel" size=100>
    </select>
    <script type="text/javascript">
        for ( var n=0;n<1000;n++)
        {    s.length++;
            s.options[s.length-1].text=n;
        }
    </script>

faire :

    <select id="sel" size=100>
    </select>
    <script type="text/javascript">
        function ajout()
        {    if (n<1000)
            {    s.length++;
                s.options[s.length-1].text=n;
                n++;
                setTimeout("ajout();",100);   // 100 ou moins ou plus... !
            }
        }
        var s=document.getElementById("sel");
        n=0;
        ajout();
    </script>

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
phpmysql2007 Messages postés 19 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 4 décembre 2011
26 févr. 2008 à 16:07
Grand Merci
Le probleme n'est pas dans la liste mais dans les fonctions  lancerdir() et lire():

function lancerdir()
{
    var w = new ActiveXObject("WScript.Shell");  
w.run("%comspec% /c  dir AB*.jpg /B> txt.tmp ",0 ); 
            return false;  
//si je met ici un alert("toto") tout va bien si non lire() lit le 1er fichier créer lors de la première recherche: donc il lit le 1er fichier trouvé sans attendre la créeation du nouveau malgrès qu'à chaque fois j'écrase le 1er//
    }

function lire()
{
       
        var fsolire=new ActiveXObject("Scripting.FileSystemObject");
        var ts=fsolire.OpenTextFile("txt.tmp",1,true);
        while (!ts.AtEndOfStream)    // tant que le fichier n'est pas entiérement lu
    {    
            lu=ts.ReadAll();  
        }               
        ts.close();
        NomDuFichier=lu.split("\r");
         
 } 
0
phpmysql2007 Messages postés 19 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 4 décembre 2011
26 févr. 2008 à 18:25
Oui, au lieu de alert(), j'ai utilisé une fonction (pas la
mienne) pause:

function pause(time)

    {

       d=new Date();

       diff=0;

        while(diff < time)

        {

          n=new Date();

          diff=n-d;

         }

   }

le problème si le nombre de fichier est grand, le timer est finie avant et on
retombe dans le même problème. Le mieux c'est de trouver comment détecter la
fin de chargement du fichier txt.tmp pour ne démarrer lier() qu'après


Mais comment!?? je ne sais pas si ça éxiste?


Merci.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
27 févr. 2008 à 09:46
>>  while (!ts.AtEndOfStream)    // tant que le fichier n'est pas entiérement lu
    {      lu=ts.ReadAll();     }               

    readAll lit tout le fichier ! la boucle est inutile.
        utiliser ReadLine();
     ta pause ne donne pas la main au système, et ne libère pas
       le programme, ça ne changera donc rien.
       setTimeout ( ou setInterval ) est la seule solution
          sauf à écrire un ActiveX qui fasse Doevents ( remarque que c'est
            3 lignes de programe ! )

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
phpmysql2007 Messages postés 19 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 4 décembre 2011
27 févr. 2008 à 17:31
Je vais essayer de trouver ces 3 lignes de programe
qui remplace Doevents  en ActiveX
souhaite moi bonne chance
Merci
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
27 févr. 2008 à 17:55
>>Je vais essayer de trouver ces 3 lignes de programe qui remplace Doevents  en ActiveX
    et pourquoi ne pas utiliser setTimeout ???? ça le fait !

    sinon regarde    exemple ici

    et remplace
Public Sub BeepMessage(Son As Long)

 Dim ret As Long

    ret = MessageBeep(Son)

 End Sub

    par

Public Sub BeepMessage()
   DoEvents()


 End Sub

    modifie l'appel pour ne pas donner le paramètre
       ( modifie les noms si tu veux ... )
    point barre....    mais.... setTimeout, c'est plus simple

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
Rejoignez-nous