1

Тема: JScript + поиск

Добрый день, Господа.

Прошу оказать информационную поддержку и помощь по выбору способа, а именно:

хочу сделать НЕ НА СТОРОНЕ клиента создание файла-базы с сохранением на расшаренном ресурсе всех имен файлов этого самого расшаренного ресурса.
Доступ у пользователей - чтение 1 общей папки, а в ней 28000 папок, в каждой 27 подпапок, а там от 0 до 50 файлов типа тифф и пдф.
Делаю для этого админку, а в ней скриптом создается единственный текстовой файл, где будет содержаться имя каждого файла расшаренного ресурса.
Имя расшаренных файлов типа TXW.01.0140A0000.25605.032_031.tif  или  TXW.01.0141_0142.25605.032_001.tif есть еще такие TXW.01.0141_0142.25605.SP.032_001.tif. Последний файл в поиск не должен попасть вобщем, т.к. это спецификация. Путь к файлу таков: \\192.168.1.200\scan\25605\25605tx\ ...
Думаю составить скрипт, который бы записал через админку 1 раз (до будущих внесений изменений) с помошью массива текстовый файл -базу, а клиентская часть при поиске выбирала б нужные файлы и делала автоссылки на них. Выбор пользователь делает с помощью формы с чекбоксами. Важная часть поиска отводится к символам в названии файла на примере это категория - TXW (всего их 27) и/или 01 (номер подразделения, всего их 50) и/или условный номер внутри подразделения (0141_0142, 0140A0000 и т.д.), разделенные точками, остальные части - неважны для поиска..

А вдруг такая логика построения замудреная будет, что скажите? ведь придется создавать массив для затребованных элементов типа категории, номера подразделения и условного внутреннего номера, а потом еще массив для 28000 проектов ... псевдоаналог многомерного массива.

Я отсеял вариант создания автоссылок клиентской стороной из-за постоянного перелопачивания всех папок и увеличением нагрузки на сервер при каждом запросе...

Есть ли решение или вариации попроще??

Любители построили Ковчег, а профессионалы - Титаник.

2

Re: JScript + поиск

OFF.

Чуть незабыл - всех с наступающим Новым Годом!!!

/а я весь в мыслях и работе... /

Любители построили Ковчег, а профессионалы - Титаник.

3 (изменено: Rumata, 2010-12-30 10:36:03)

Re: JScript + поиск

Бррр. Ничего не понятно. Озвучьте толково что требуется?

Составить список файлов и отсеить ненужное просто:

dir /b /s /a-d *.tif | find /v ".SP." > dir.txt

Вы можете это пропустить через еще один фильтр, который сформирует готовую html-страничку.

P.S. Кажется Вы создавали подобную тему?

( 2 * b ) || ! ( 2 * b )

4 (изменено: stir, 2010-12-30 12:02:18)

Re: JScript + поиск

Здесь можно вспомогательные файлы прикреплять? например, рар или зип.. так будет нагляднее.
Спасибо за подсказку, я эту конструкцию и не видел в справочнике (нет примера ее использования, упоминание только вскользь)

Любители построили Ковчег, а профессионалы - Титаник.

5

Re: JScript + поиск

Загрузите на slil.ru. На мой взгляд Rumata решил вашу задачу.

6 (изменено: stir, 2011-01-14 08:37:46)

Re: JScript + поиск

Вот и каникулы" закончились - приступаем к работе...

Для 100% наглядности привожу страничку хтм с необходимыми включениями и не претендую на элегантность и компактность кода...
Прошу мне подсказать можно ли без применения цикла вывести в файл перечень полных путей всех файлов в подпапках нужной мне главной папки - name4, т.к. такой код видит файлы только в главной папке минуя все вложенные "подпапки"?

<table width=100% cellpadding=0 cellspacing=0>
<tr>
<td class=head align=right>
<img src="images/pt.gif" width=1 height=3>
</td>
</tr>
</table>


&nbsp;&nbsp;<h2 align="center">МА. Создание и Обновление файла-базы архива.</h2>
<hr noshade size=1>

<table>
<tr>
<td width=30></td>
<td>
<span class=h5>


Разрешите выполнение всех сценариев ActiveX на данной странице!<br><br>
При нажатии кнопки "Обновить" автоматически создается файл-база, содержащий имена всех папок,
подпапок и файлов всего архива,а старый файл-база затирается автоматически.<br>
Пожалуйста, дождитесь завершения обновления файл-базы, после завершения обновления здесь появится соответствующее сообщение.
<br><br>

<form>
<input name=refrech type=submit value="Обновить" onClick="reredir()">
</form>
<br><br>

<script type="text/javascript">
    totalproekt = '28000' // из js перенесено в код временно
    name3 = "\u005C\u005C192.168.130.100\u005Carhiv\u005Cscan\u005C" // из js перенесено в код временно
    name4 = "\u005C\u005C192.168.130.100\u005Carhiv\u005Cscan" // из js перенесено в код временно
//  функция
  function ShowFileList0(xnamefiles0) {
   var fso = new ActiveXObject("Scripting.FileSystemObject");
   var f = fso.GetFolder(xnamefiles0);
   var fc = new Enumerator(f.SubFolders);
   var s = "";
   for (; !fc.atEnd(); fc.moveNext())
      s += fc.item() + '\n';
   return s;
   }
//  и еще функция
  function ShowFileList1(xnamefiles1) {
   var fso = new ActiveXObject("Scripting.FileSystemObject");
   var f = fso.GetFolder(xnamefiles1);
   var fc = new Enumerator(f.Files);
   var s = "";
   for (; !fc.atEnd(); fc.moveNext())
      s += fc.item() + '\n';
   return s;
   }
//    а также
    // ниже - массив с элементами для перебора подпапок
    var filesmassiv = ["a", "ar", "as", "em", "en", "eo", "es", "gp", "gs", "kj", "km", "kmd", "m", "nk", "nv", "nvk", "os", "ov", "pb", "pg", "ps", "pt", "ss", "tk", "ts", "tx", "vk"];
   var totalproektfolders = 27 // из js перенесено в код временно
//    вроде все из js
var putcatalog = "c:\\pkoarhiv1.temp" // из js перенесено в код временно, абсолютный полный путь к файлу-базе 1
var putfiles = "c:\\pkoarhiv2.temp" // из js перенесено в код временно, абсолютный полный путь к файлу-базе 2

document.write("Количество проектов в архиве: " + totalproekt + '<br>' + 'В каждом проекте папок подпроектов: ' + totalproektfolders + '<br>')

// модуль создания и обновления базы
function reredir() {
if (confirm("Обновить базу, press 'OK'?")) {
var filesall = new ActiveXObject("Scripting.FileSystemObject"); // Создаем объект для занесения всех путей файлов
var foldersall = new ActiveXObject("Scripting.FileSystemObject");  // Создаем объект для занесения всех подпапок
var file0 = foldersall.CreateTextFile(putcatalog, true);    // Создаем файл подкаталогов
var file1 = filesall.CreateTextFile(putfiles, true);    // Создаем файл полных путей

// далее - код обхода папки *name4* с занесением данных в массив(ы) и/или c записью в файл(ы) на диск с использованием функции ShowFileList из data3.js
//  записи папок и файлов

var xnamefiles0=name4
file0.WriteLine(ShowFileList0(xnamefiles0));
file0.Close();

var xnamefiles1=name4
file1.WriteLine(ShowFileList1(xnamefiles1));
file1.Close();

alert("Обновление базы завершено");

}
else alert("Обновление базы не произведено");
}
</script>





<br><br>
Интересная должно быть конструкция, жаль не работает *применяя ее в лоб*:<br>
dir /b /s /a-d *.tif | find /v ".SP." > dir.txt
<br><br>
Хорошо бы еще сюда добавить индикацию для нетерпеливых или нестабильной локалки, :)... но это позже.
<br><br>

</span>
</td>
</tr>
</table>

<br><br>

<hr noshade size=1>

Rumata, стыдно мне признать, но вашу подсказку я так и не смог применить на деле...
Как то преподаватель сказал нам: "У человека есть несколько этапов познания - 1-й=я знаю предмет, 2=О Боже, я ничего уже не понимаю, я ничего получается и не знаю!, и 3- ну вот теперь я все знаю!", , думаю я в настоящий момент (после прочтения 5% одной полной книги по яваскрипту из 5(!) скаченных книг) начинаю путь из 2 этапа в 3, .


В коде есть пока еще не использованные переменные и данные типа - filesmassiv, которые будут использованы в ближайшее время...

Любители построили Ковчег, а профессионалы - Титаник.

7 (изменено: stir, 2011-01-14 12:12:39)

Re: JScript + поиск

Разбил скрипт на 2...

<form>
<input name=refrech type=submit value="Обновить базу каталогов" onClick="reredir0()">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input name=refrech type=submit value="Обновить базу файлов" onClick="reredir1()">
</form>
<br><br>

<script type="text/javascript">
var putcatalog = "c:\\pkoarhiv0.temp" // из js перенесено в код временно, абсолютный полный путь к базе каталогов
document.write("Количество проектов в архиве: " + totalproekt + '<br>' + 'В каждом проекте папок подпроектов: ' + totalproektfolders + '<br>')

// модуль создания и обновления базы каталогов
function reredir0() {
if (confirm("Обновить базу каталогов, press 'OK'?")) {
var foldersall = new ActiveXObject("Scripting.FileSystemObject");  // Создаем объект для занесения всех подпапок
var file0 = foldersall.CreateTextFile(putcatalog, true);    // Создаем файл подкаталогов
// далее - код обхода папки *name4* с занесением данных в массив(ы) и/или c записью в файл(ы) на диск с использованием функции ShowFileList из data3.js
//  записи папок и файлов
var  xnamefiles0=name4
file0.WriteLine(ShowFileList0(xnamefiles0));
file0.Close();

alert("Обновление базы каталогов завершено");
}
else alert("Обновление базы каталогов не произведено");
}
</script>




<script type="text/javascript">
var putfiles = "c:\\pkoarhiv1.temp" // из js перенесено в код временно, абсолютный полный путь к базе файлов
// модуль создания и обновления базы файлов
function reredir1() {
if (confirm("Обновить базу файлов, press 'OK'?")) {
var filesall = new ActiveXObject("Scripting.FileSystemObject"); // Создаем объект для занесения всех путей файлов
var file1 = filesall.CreateTextFile(putfiles, true);    // Создаем файл полных путей
// далее - код обхода папки *name4* с занесением данных в массив(ы) и/или c записью в файл(ы) на диск с использованием функции ShowFileList из data3.js
//  записи папок и файлов

//цикл обхода проектов
for (var j = 0; j < 28000; j++) {
var h = j + 1;
var name5 = name3 + h + '\u005C' + h;
    for (var i = 0; i < 27; i++) {
    xnamefiles1 = name5 + filesmassiv[i];
    file1.WriteLine(ShowFileList1(xnamefiles1));
    }
}

file1.Close();
alert("Обновление базы файлов завершено");
}
else alert("Обновление базы файлов не произведено");
}
</script>

Есть соответствующие претензии т.к. он выполняется на стороне клиента:
1. обновление базы каталогов происходит медленно - примерно 5-7 минут.
2. обновление базы файлов вообще не смогло пройти, после 30 мин. сообщение браузера - Дальнейшее выполнение скрипта может "типа подвесить" компьютер и предложил 2 варианта - продолжить или завершить, . Т.к. рабочий день близится к завершению - отменил. По моим прикидкам должно около 2 часов уйти на перезаливку этой второй базы.. что не есть хорошо.


Ребят, что делать то?!:rolleyes::o

Любители построили Ковчег, а профессионалы - Титаник.

8

Re: JScript + поиск

Если принять тестовый прогон, где код такой:

<script type="text/javascript">
var putfiles = "c:\\test.temp"
function reredir1() {
if (confirm("Обновить базу файлов, press 'OK'?")) {
var filesall = new ActiveXObject("Scripting.FileSystemObject"); // Создаем объект для занесения всех путей файлов
var file1 = filesall.CreateTextFile(putfiles, true);    // Создаем файл полных путей
    //цикл обхода проектов
    for (var j = 25600; j < 25650; j++) {
    var h = j + 1;
    var name5 = name3 + h + '\u005C' + h;
    for (var i = 0; i < 27; i++) {
    xnamefiles1 = name5 + filesmassiv[i];
        //if (xnamefiles1 > 0)
    file1.WriteLine(ShowFileList1(xnamefiles1));
    }
}

file1.Close();
alert("Обновление базы файлов завершено");
}
else alert("Обновление базы файлов не произведено");
}
</script>

то в файле появляются ненужные пустые строки, которые повидимому и тормозят исполнение скрипта так сильно...
пробовал включить условие, но не пойму как повлиять на результат вывода списка, где в условии строки являются НЕПУСТЫМИ, то их включить в список, а иначе - невключать, подскажите?

что-то вроде этого:

if (ShowFileList1(xnamefiles1) = " ") file1.WriteLine(ShowFileList1(xnamefiles1));
Любители построили Ковчег, а профессионалы - Титаник.