|
|
|
|
|
для: VladimirL
(27.07.2009 в 17:18)
| | Ну почему громоздко? Если вам все надо в одном файле строками, то пишите, почему это не правильно? Делайте так как удобно вам будет для работы с этим файлом.
В СНМ файлах есть описание метода записи строк и чтения строк из файла, и коли вам нужно работать именно со строками, то все вполне оправдано.
Письмо о чем? :) | |
|
|
|
|
|
|
|
для: sim5
(22.07.2009 в 12:27)
| | Уважаемый sim5
Сердечная благодарность за Вашу помощь! (правильнее сказать за Ваш программный код!)
Все СУПЕР.
Ответ сервера (а он приходит только на один заказ) я пишу во временный файл. Потом, построчно ищу что-то знакомое с помощь if (stroka.substring(0, ххх)=’hhhhhhhhhhhh’) – типа Left(ххх) и .substring(ххх,0)-типа Right(xxx). Если нашел – получаю данные и дописываю их в txt-файл. Затем следующий запрос к серверу. В итоге – один файл, в котором, каждая строка- информация об одном заказе. Это, может и не правильно, с точки зрения программирования и громоздко, но Работает.
Теперь начал изучать SQL-запросы, что-бы внести эту информацию в существующие таблицы в определенные поля, заменив при этом устаревшую информацию.
Еще раз огромное Спасибо,
С уважением,
Владимир
P.S. Жду Ваше письмо! | |
|
|
|
|
|
|
|
для: VladimirL
(22.07.2009 в 11:39)
| | 1. Ноль ставить смысла нет, так как за такое время сделать запрос на сервер и получить ответ от него, вы не сможете. Да и за 5 сек, указаных в таймере, вы его не получите. Таймер просто постоянно проверяет флаг, а он устанавливается в true (разрешение очередного запроса) после приема документа с сервера. Грубо говоря, вы будете делать запросы на сервер с той переиодичностью, с которой он вам отвечает. Если это нормально, пусть так и останется. А ведь сервер может и задержать ответ, и преждевременно делать очередной запрос, значит не получить предыдущий документ.
2. Сперва нужно получить документ, а потом уже обрабатывать. Нет проблемы добавить обработку полученного документа, распарсить его как требуется, даже вставить в окно и пред. просмотр его, и записать готовый формат, если это Access .dbf, то проблем не будет. Но заниматься этим должны уже другие функции, не относящиеся к получению и записи страницы, а чтобы это сделать, нужно видеть исходник полученной страницы, знать, что из нее забирать и в какой формат записывать. То есть увидеть два документа - полученную страницу, и то, что из нее получается в Access.
3. Что значит соответствие строковых функций? Как это понимать?
Notepad++ - бесплатный расширенный Блокнот с подсветкой ситаксиса многих языков программирования. | |
|
|
|
|
|
|
|
для: sim5
(21.07.2009 в 09:46)
| | Уважаемый sim5
Благодарю Вас за сотрудничество!
Я Восхищен Вашим программным кодом! Я так не напишу никогда… Практически все понятно.
Если Вы можете уделить мне еще некоторое время, то я хотел-бы задать еще 3 вопроса.
1. Если я общаюсь с сайтом Поставщика по Договору (он меня не должен забанить за частые запросы) можно-ли установить tm = setInterval("getOrders()",5000); //опрос состояния запроса
не 5000, а 0.
2. Можно ли, особо не усложняя алгоритм, перенести t (function saveHTML(t)) в одномерный массив строковых значений, где в каждом элементе будет соответствующая текстовая строка кода ответного HTML. Сейчас я, используя Вашу программу записываю этот код во временный файл, тут-же его открываю для чтения в построчном режиме, строки обрабатываю, и стираю, а полученную информацию добавляю в конечный файл. Эту обработку я планирую вставить перед строкой n++; в function getOrders(), т.е. Пока грузится новый запрос обрабатывается предыдущий временный файл.
3. Я понимаю, что вопрос не корректный, но не могли-бы Вы подсказать мне правильное соответствие строковых функций: Длина (Len()), Право(Right()), Середина (substr(,)) и т.д.
Благодарю Вас за сотрудничество,
С уважением,
Владимир
PS. Подскажите пожалуйста, недорогой простой редактор для HTML кода, а то в Блокноте писать и искать свои ошибки трудновато. | |
|
|
|
|
|
|
|
для: VladimirL
(21.07.2009 в 08:43)
| |
<html>
<head>
<script>
var fso = new ActiveXObject("Scripting.FileSystemObject"); //файловый объект
//папка для хранения, где User пользователь
var folder = "C:\\Documents and Settings\\User\\Мои документы\\Orders\\";
var ext = ".txt"; //расширение файлов
var orders = new Array(); //массив заказов
var n = 0; //счетчик
var flag = false; //флаг запроса
//создание папки, если не создана
if (!fso.FolderExists(folder)) fso.CreateFolder(folder);
function runSave() {
//получение массива заказов из строки
//формат записи NNNN,NNNN-NNNN,NNNN,NNNN,....NNNN
var ord = document.getElementById("order").value;
ord = ord.split(",");
for(i=0; i<ord.length; i++) {
if(ord[i].indexOf("-") != -1) {
var len = ord[i].split("-");
for(k=len[0]; k<=len[1]; k++) orders[orders.length] = k;
} else orders[orders.length] = ord[i];
}
flag = true; //разрешаем запрос
tm = setInterval("getOrders()",5000); //опрос состояния запроса
getOrders();
}
function getOrders() {
if (flag) {
if (n < orders.length) {
flag = false; //запрещаем запрос
//указываем номер заказа
document.getElementById("code").value = orders[n];
//отправляем форму
document.getElementById("frm").submit();
n++;
} else {
clearInterval(tm);
n = 0; flag = false; //запрещаем запрос
document.getElementById("info").innerHTML = "Запись заказов окончена!";
}
}
}
function saveHTML(t) {
if(t) {
var name = orders[n-1]+ext;
var f1;
f1 = fso.CreateTextFile(folder+name, true);
f1.Write(t);
f1.Close();
flag = true; //разрешаем очередной запрос
document.getElementById("info").innerHTML = "Заказ №"+orders[n-1]+" успешно сохранен!";
}
}
</script>
</head>
<body>
<form action="URL" target="frame" method="post" name="frm" id="frm" style="display: none;">
<INPUT type="hidden" value="search" name="action">
<INPUT type="hidden" id="code" name="searchType">
<INPUT type="hidden" value="yes" name="show_form">
</form>
<iframe onload="saveHTML(frame.document.body.innerHTML)" name="frame" width="0" height="0"></iframe>
Номера заказов: <input type="text" id="order"> <input type="button" value="Запись" onclick="runSave()">
<div id="info"></div>
</body>
</html>
|
Не надо никакой SUBMIT, в примере она была для проверки. Вот здесь, форма будет отправляться скриптом, через функцию. Я не знаю вашего сценария, которым вы хотите запускать все. Здесь, для примера, запуск происходит кнопкой "Запись", которая обращается к функции runSave(). В ней формируется массив номеров заказов и происходит запуск процесса.
В поле заказов номера вводятся через запятую (в конце последнего номера в строке, запятую не прописывать), можно и диапазон, если они упорядоченные, то есть, например, 11111-18006,18009,18015-18025 и т.д.. Далее запускается таймер проверяющий флаг запроса к серверу, и, если он установлен, то происходит запрос и запись ответа в файл.
Вся эта кухня работает типа Ajax, вы отправляете форму, и указывате куда поместить ответ сервера, в IFARME, он в свою очередь, после загрузки документа, отдает содержимое его на запись. Другими словами, хотя в HTA содержимое, это html-страница, ее остальные элементы не будет перезагружаться, так что можно выводить на экран и другую сопутствующую информацию.
PS. Вот только время повторения запросов к серверу нужно будет подобрать, чтобы вас не забанили за частые запросы. | |
|
|
|
|
|
|
|
для: PAT
(15.07.2009 в 15:30)
| | Уважаемые Господа!
Очень не хочу выглядеть тупым занудой, но я капитально застрял.
Пытаюсь реализовать алгоритм, описанный г-ном PAT, т.е есть файл zakaz.txt, пишу файл HTA, где прописан URL хочу файл CNT.TXT.
Но вот засада!
Для того, что-бы получить в iframe копию сайта поставщика с информацией о конкретном заказе я должен выполнить HTML код, описанный выше г-ном sim5:
<form action="ваш url" … </form>
Но как организовать цикл, который менял-бы в этом <form> код конкретного заказа
<INPUT type='hidden' value='1111111111' name='searchType'>
из файла zakaz.txt (прочитать построчно файл zakaz.txt с этими номерами у меня получилось благодаря справочников г-на sim5)
2. Как избавиться от ручного нажатия кнопки <input type="submit" value="Send"> и автоматически отправить этот <form> в Internet.
Т.е. не получается по алгоритму PAT:
document.all._ifr.src = document.all._url.value;
В iframe я пытаюсь получить не просто _url а ответ на целы тег <form>, да еще с конкретным значением номера заказа.
Я предполагаю, что этот <form> надо автоматически собирать в другом месте и как-то хитро засылать в Internet.
Уважаемый PAT!
Если Вас не затруднит, подскажите пожалуйста, а почему нет этой строки
onload = function () {document.all._ifr.attachEvent ('onload', f2)}
в нижнем примере?
Благодарю Вас за сотрудничество.
P.S. Буду очень признателен за подсказку: каким оператором построчно читать содержимое HTML файла в iframe в символьную переменную в <script>. | |
|
|
|
|
 598.3 Кб |
|
|
для: VladimirL
(16.07.2009 в 10:40)
| | Я получил письмо. Если бутылка, которую вы хотите отправить, в дюймах соответствует диаметру вашего ТФ-кабеля, можете ее переслать почтой на мой электронный адрес. :)
Конечно, кнопка SUBMIT в форме не обязательна, все можно сделать иначе, полная форма была приведена для проверки.
Чтобы знать как все можно устроить, это JavaScript, JScript, WSH. В приложении CHM файл описывающий все это, на русском, но примеры все на VB, JScript 5 с примерами на JScript (тот же JavaScript в основе), но описание английское. | |
|
|
|
|
|
|
|
для: PAT
(15.07.2009 в 15:30)
| | Уважаемый PAT !
Благодарю за сотрудничество!
Собственно этого и очень хочется!
В выходные обязательно посмотрю Ваш код.
Радует, что в НТА файле можно как-то обрабатывать текст принятого сайта (файла) и формировать сводный чистый TXT (CSV). Но сколько и каких языков Internet программирования для этого нужно выучить? | |
|
|
|
|
|
|
|
для: sim5
(15.07.2009 в 15:24)
| | Уважаемый sim5 !
Благодарю за оказанное содействие!
Ваш код РАБОТАЕТ! (отправил благодарственное письмо)
Меня немного высадил (всего на 5 асов) Kaspersky Internet Security 7.0 с файлом mshta.exe (Как выяснилось: HTA файл – это пакет команд и операторов для приложения mshta.exe).
К сожалению, мне пока не удалось избавиться от нажатия кнопки Send. Предполагаю, что в дальнейшем, при внесения обработки принятого сайта и формировании чистого информационного текстового файла CSV в модуле НТА (алгоритм PAT он же CNT) этот вопрос снимется.
Если Вас не затруднит, прошу Вас рекомендовать тонкий справочник (список команд, краткое описание, короткие примеры) и способ его приобретения для реализации моих задач (интуитивно править чужие коды тяжело) | |
|
|
|
|
|
|
|
для: Trianon
(15.07.2009 в 23:50)
| | Пароль забыл, вот и пришлось сменить :-) | |
|
|
| |
|