繁体   English   中英

iMacros从CSV文件读取/写入

[英]IMacros Reading/Writing From/To CSV File

我已经在Firefox的IMacros插件中编写了Java代码,该代码可从CSV文件获取信息。 javascript用于控制另一个宏。 一切工作都很好,直到我想改善它。 CSV文件的结构如下:

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

我试图计算CSV文件中的行数,但最后在文件中手动指定了行数。

问题是(使用Java脚本宏,第一个控制2个Java脚本,第二个控制):

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

2)将此变量用作循环计数器和另一个宏

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

当我能够从CSV文件中成功读取信息时,其他所有事情都会变得很复杂。 我试着用不同的方式,但不知何故,现在它只读取文件的第一行,如果指定SET !DATASOURCE_LINE 1SET !DATASOURCE_LINE 3 ,如果该行是没有做任何事情24

如果将所有代码放在一个Java脚本中并以指定的顺序调用sub-macros,则所有操作都在进行。 但是,如果从第一个调用第二个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-script宏中,该宏将在指定其他所有内容的位置调用第二个宏。 由于上述问题,我尚未实现将值写入CSV文件。

谢谢您的帮助!

让您的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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM