IMacro Scripting - Как прочитать локальный файл .txt, используя JavaScript - PullRequest
2 голосов
/ 06 августа 2009

Существует этот IMacro инструмент для создания сценариев, если вы хотите автоматизировать какой-либо веб посещения страниц с использованием JavaScript.

Я хотел бы, чтобы мой javascript читался из локального файла .txt (не файл .cvs и не очень хорошо отформатирован .. Я хотел бы искать в нем, вероятно, с регулярным выражением ..) и основываясь на этом чтении, скрипт будет выполнять какую-то работу в IMacros .. (например, позвонить на какой-нибудь веб-сайт URL и т. д.)

Ребята, вы хоть представляете, как это можно сделать? Я делаю все локальный, и это мой локальный браузер читает с моего локального жесткого диска .. это должно как-то возможно .. но как?

Ответы [ 4 ]

3 голосов
/ 11 февраля 2013

Да, вы можете сделать это с imacros, но вам нужно вызвать его из файла javascript.js. загрузите ваш контент как один блок, затем вы можете использовать javascript indexOf метод, чтобы найти строку в тексте и выполнить оператор if. Пример текста (внутри вашего текстового файла): "Привет, мир!"

var load;
load =  "CODE:";
load +=  "set !extract null" + "\n"; 
load +=  "SET !DATASOURCE text.txt" + "\n"; 
load +=  "SET !DATASOURCE_COLUMNS 1" + "\n"; 
load +=  "SET !DATASOURCE_LINE 1" + "\n"; 
load +=  "SET !extract {{!col1}}" + "\n";
iimPlay(load);
var s=iimGetLastExtract(0);
var index=s.indexOf("w");
if (index>0){
do your code;
}
1 голос
/ 22 февраля 2017

в Firefox вы можете прочитать файл напрямую.

больше информации на https://developer.mozilla.org/en-US/Add-ons/Code_snippets/File_I_O#Line_by_line

для чтения файла построчно используйте следующее

var FileUtils = Components.utils.import("resource://gre/modules/FileUtils.jsm").FileUtils;

FileLocation = "C:\\myFile.txt"

var file   = new FileUtils.File( FileLocation );

// open an input stream from file
var istream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
istream.init(file, 0x01, 0444, 0);
istream.QueryInterface(Components.interfaces.nsILineInputStream);

// read lines into array
var line = {}, lines = [], hasmore;
do {
  hasmore = istream.readLine(line);
  lines.push(line.value); 
} while(hasmore);

istream.close();

// do something with read data
alert(lines);
1 голос
/ 03 сентября 2015

Я решил это по старинке - читая построчно:

function read_file(path) {
    var content = '', l = 1, f, res = '';

    do {
        content += res && (res + "\n");
        f = "CODE: "+"\n";
        f += "SET !EXTRACT null" + "\n"; 
        f += "SET !DATASOURCE \""+path+"\" "+"\n";
        f += "SET !DATASOURCE_COLUMNS 1" + "\n"; 
        f += "SET !DATASOURCE_LINE " + l + "\n"; 
        f += "SET !EXTRACT {{!col1}}" + "\n";
        iimPlay(f);
        res = iimGetLastExtract();
        l++;
    } while (res && res != '#EANF#');

    return content;
}

var file_conten = read_file('/home/user/iMacros/templates/some_file.txt');

Надеюсь, это поможет будущим читателям ^ _ ^

1 голос
/ 03 февраля 2011

Вы должны использовать XML-запрос http, поскольку объект Activex файла не поддерживается ни одним другим браузером, кроме IE.

Этот код прекрасно работает при чтении локального текста или любого другого файла.

f();
function f()
{
    var allText =[];
    var allTextLines = [];
    var Lines = [];
    var txtFile = new XMLHttpRequest();

    txtFile.open("GET", "file://D:/test.csv", true);
    allText = txtFile.responseText;
    //allTextLines = allText.split(/\r\n|\n/);//splits ur file line by line.

    //alert(allTextLines);
    txtFile.onreadystatechange = function()
    {
        if (txtFile.readyState == 4)
        {
            // Makes sure it's found the file.
            allText = txtFile.responseText;
            allTextLines = allText.split(/\r\n|\n/);

            alert(allText);
        } else { //alert("Didn't work"); 
        }
    }
    txtFile.send(null)
}
...