【问题标题】:IMacros Reading/Writing From/To CSV FileIMacros 从/向 CSV 文件读取/写入
【发布时间】:2016-01-20 10:51:30
【问题描述】:

我在 Firefox 的 IMacros Add-on 中编写了一个 Java 代码,它从 CSV 文件中获取信息。 javascript 用于控制一个宏与另一个宏。一切都很好,直到我想改进它。 CSV文件的结构如下:

LASTLINEUSED, NUMBEROFLINES
 4,10 
 NAME, SURNAME
 A,B 
 C,D 
 E,F 
 ... 
 M,N

我尝试计算 CSV 文件中的行数,但最终以在文件中手动指定它结束。

问题是(使用java-script宏,有2个java-scripts第一个控制第二个):

1) 从 CSV 文件中读取信息并将其写入变量

2) 将此变量用作循环计数器并在另一个宏中使用

3) 将最后使用的行号写入 CSV 文件,以便下次启动时从停止处继续

虽然我成功地能够从 CSV 文件中读取信息,但其他一切都变得复杂了。我尝试过不同的方式,但不知何故,如果指定SET !DATASOURCE_LINE 1 或SET !DATASOURCE_LINE 3,它现在只读取文件的第一行,如果该行是2 或4,则根本不做任何事情。

如果将所有代码放在一个 java 脚本中并以指定的顺序调用子宏,那么之前一切正常。但是如果从第一个调用第二个 java 脚本,就会出现在它们之间传递变量的问题(以及如果调用子宏不按特殊顺序)。

在我使用的 IMacros 版本中,您在执行程序时看不到变量值,因此调试非常有限,一切都变得非常复杂。
代码如下:

var lastUsedLine;
lastUsedLine = "CODE:";
lastUsedLine += "SET !ERRORIGNORE YES" + "\n";
lastUsedLine += "SET !TIMEOUT_TAG 3" + "\n";
lastUsedLine += "SET !TIMEOUT_STEP 3" + "\n";
lastUsedLine += "SET !DATASOURCE MyInformation.csv" + "\n";
lastUsedLine += "SET !DATASOURCE_LINE 2" + "\n";
lastUsedLine += "ADD !EXTRACT {{!COL1}}" + "\n";
lastUsedLine += "ADD !EXTRACT {{!COL2}}" + "\n";
iimPlay(lastUsedLine);

var currentLine = iimGetLastExtract(1);
var numberOfLines = iimGetLastExtract(2);

for (a = currentLine; a < (numberOfLines + 1); a++)
{
iimPlay(macro1);
//iimSet ("CURRENTLINE", a); 
//--- This CURRENTLINE worked before but only if it is placed one line before the sub-macro where it will be used
iimPlay(processingInformation);
}

var processingInformation;
processingInformation = "CODE:";
processingInformation += "SET !ERRORIGNORE YES" + "\n";
processingInformation += "SET !TIMEOUT_TAG 3" + "\n";
processingInformation += "SET !TIMEOUT_STEP 3" + "\n";
processingInformation += "SET !TIMEOUT_PAGE 60" + "\n";
processingInformation += "TAB T=1" + "\n";
processingInformation += "TAB CLOSEALLOTHERS" + "\n";
processingInformation += "SET !DATASOURCE MyInformation.csv" + "\n";
processingInformation += "SET !DATASOURCE_LINE {{currentLine}}" + "\n";
processingInformation += "URL GOTO=http://www.example.com/" + "\n" ;
processingInformation += "TAG POS=1 TYPE=INPUT:Name ATTR=ID:id1 CONTENT={{!COL1}}" + "\n" ;
processingInformation += "TAG POS=1 TYPE=INPUT:SURNAME ATTR=ID:id2 CONTENT={{!COL2}}" + "\n" ;
processingInformation += "TAG POS=1 TYPE=INPUT:SUBMIT ATTR=ID:done" + "\n" ;

For loop 将被放置在另一个 java 脚本宏中,该宏将调用指定其他所有内容的第二个宏。由于上述问题,将值写入我尚未实现的 CSV 文件。

感谢您的帮助!

【问题讨论】:

    标签: javascript java firefox imacros


    【解决方案1】:

    让您的 CSV 文件的结构如下:

    NAME, SURNAME
    A,B 
    C,D 
    E,F 
    ... 
    M,N
    

    尝试下面的 js 脚本的工作原理并根据您的需要对其进行修改:

    var lastUsedLine = "SET !DATASOURCE MyInformation.csv" + "\n";
    lastUsedLine += "SET !DATASOURCE_LINE {{currentLine}}" + "\n";
    lastUsedLine += "SET !EXTRACT {{!COL1}}" + "\n";
    lastUsedLine += "ADD !EXTRACT {{!COL2}}" + "\n";
    
    var processingInformation = "SET !ERRORIGNORE YES" + "\n";
    processingInformation += "SET !TIMEOUT_STEP 3" + "\n";
    processingInformation += "SET !TIMEOUT_PAGE 60" + "\n";
    processingInformation += "TAB T=1" + "\n";
    processingInformation += "TAB CLOSEALLOTHERS" + "\n";
    processingInformation += "URL GOTO=http://www.example.com/" + "\n" ;
    processingInformation += "TAG POS=1 TYPE=INPUT:Name ATTR=ID:id1 CONTENT={{name}}" + "\n" ;
    processingInformation += "TAG POS=1 TYPE=INPUT:SURNAME ATTR=ID:id2 CONTENT={{surname}}" + "\n" ;
    processingInformation += "TAG POS=1 TYPE=INPUT:SUBMIT ATTR=ID:done" + "\n" ;
    
    for (i = 2; ; i++) {
        iimSet("currentLine", i);
        if (iimPlayCode(lastUsedLine) != 1)
            break;
        var ext = iimGetExtract().split("[EXTRACT]");
        iimDisplay(i + " >>>   " + ext.join("  "));
    
        iimSet("name", ext[0]);
        iimSet("surname", ext[1]);
        iimPlayCode(processingInformation);
    }
    

    【讨论】:

    • 谢谢@Shugar,这是在if语句中调用代码的有趣用法,我现在明白了原理,并且会从这里更进一步。
    猜你喜欢
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多