IMacros Reading/Writing From/To CSV 文件
IMacros Reading/Writing From/To CSV File
我在 Firefox 的 IMacros 附加组件中编写了一个 Java 代码,用于从 CSV 文件获取信息。 java脚本用于从一个宏控制另一个宏。一切都很好,直到我想改进它。 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 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文件写入值。
感谢您的帮助!
让您的 CSV 文件的结构如下:
NAME, SURNAME
A,B
C,D
E,F
...
M,N
尝试下面 js-script 的工作原理并根据您的需要进行修改:
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);
}
我在 Firefox 的 IMacros 附加组件中编写了一个 Java 代码,用于从 CSV 文件获取信息。 java脚本用于从一个宏控制另一个宏。一切都很好,直到我想改进它。 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 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文件写入值。
感谢您的帮助!
让您的 CSV 文件的结构如下:
NAME, SURNAME
A,B
C,D
E,F
...
M,N
尝试下面 js-script 的工作原理并根据您的需要进行修改:
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);
}