Autor Zpráva
zetrozet
Profil *
Mám funkci procházející pomocí FileSystemObject soubory v zadaném adresáři lokálního počítače. Jak do funkce zapsat výběr, který vybere soubory splňující podmínku zadanou s použitím wildcard znaků. Udělat totéž pomocí *.EXE spouštěného z *.HTA (*.HTM)není problém, ale rád bych to vyřešil přímo v aplikaci.
Zde je ona funkce (zatím do *.js zapíše všechny soubory nalezené ve zvoleném adresáři):

function poslat_(adr99) {
 var kde='';
 var adr99='';
 kde=this.location;
 var vystup, adresa0;
 var konc0=document.zobradr["konc"].value;
 var soub0=document.zobradr["nazsoub"].value;
 var adresa0 = '';
 if (aktadr.indexOf(':')>0) adresa0 = aktadr; else adresa0 = aktdisk+aktadr;
 while (adresa0.indexOf("//")>0) adresa0=adresa0.replace("//","/");
 while (adresa0.lastIndexOf("/")==adresa0.length-1 && adresa0.lastIndexOf(":")!=adresa0.length-2) adresa0=adresa0.substr(0,adresa0.length-1);
 kde=kde.toString();
 pos=kde.indexOf('///');
 if (pos>0) {kde=kde.substring(pos+3);}
 pos=kde.lastIndexOf('/');
 if (pos>0) {kde=kde.substring(0,pos+1);}
 if (konc0!="" && soub0!="") {
  alert("Název souboru nebo koncovka souboru musí zůstat prázdný\nOpravte"); return false; }
 if (konc0=="" && soub0=="") {
  alert("Název souboru nebo koncovka souboru musí být vyplněn.\nOpravte"); return false; }
 if (adresa0=="") {
  alert("Adresář (složka) kde má prohledávání začít, musí být vypněn vždy.\nOpravte"); return false; }
 if (konc0!="") vystup='*.'+konc0; else vystup=soub0;
 var kde0=kde+'obrazky_v.js';
 if (fso.FileExists(kde0)) { fso.DeleteFile(kde0); }
 var soubory0 = fso.GetFolder(adresa0);
 var soubory = new Enumerator(soubory0.Files);
 var vystup0 = '';
// alert(vystup); # "vystup"= soubory, hledané ve zvoleném adresáři (umožnit wildcard)
 for (; !soubory.atEnd(); soubory.moveNext()) {
 var vystup1 = soubory.item();
 vystup2 = vystup1.Path;
 vystup3 = vystup1.Name;
 while (vystup2.indexOf('\\')>0) vystup2 = vystup2.replace('\\','/');
 vystup0 = vystup0 + "\n'file:///"+vystup2+'|'+vystup3+"'+eol+";
 }
 var souborjs = fso.CreateTextFile(kde0, true);
 var vystup0 = "var eol='^';\nvar nalezeno="+vystup0+"'';";
 souborjs.WriteLine(vystup0);
 souborjs.Close();
 var ws = new ActiveXObject("WScript.Shell");
 ws.Run(kde+"obrazky_v.htm");
}
Chamurappi
Profil
Reaguji na zetrozeta:
Zdá se, že FSO v sobě žádnou nativní podporu nemá. Nezbývá asi nic jiného, než projet soubor po souboru a zkontrolovat název. Musí to být wildcardy? Nešlo by místo nich používat regulární výrazy? Asi by bylo možné napsat funkci, která pomocí regulárních výrazů převede wildcard na regulární výraz… a pak bys s tím výsledným výrazem mohl zkoušet matchnout jednotlivé názvy souborů. Ale soudě dle uvedeného kódu předpokládám, že si s regulárními výrazy asi netykáš.
zetrozet
Profil *
Máš pravdu, regulární výrazy jsou pro mne "španělská vesnice", takže potřebuji zápis podmínky do "if" písmenko po písmenku.
zetrozet
Profil *
Tak jsem prolezl nejzákladnější základy a snad s tím těch pár roků do důchodu vystačím. Když mi v patnácti řekli, že "výpočetní technika" bude mít význam za třicet let, nevěřil jsem, ale měli pravdu.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0