我已經在Firefox的IMacros插件中編寫了一個Java代碼,用於從CSV文件獲取信息。 javascript用於控制另一個宏。一切都很好,直到我想改善它。 CSV文件的結構如下:IMacros讀取/寫入CSV文件
LASTLINEUSED, NUMBEROFLINES
4,10
NAME, SURNAME
A,B
C,D
E,F
...
M,N
我試着計算CSV文件中的行數,但以文件中手動指定它結束。
被(用java腳本宏,有2 java的腳本的第一控制第二)問題:
1)讀取從CSV文件信息,並將其寫入到可變
2 )使用這個變量作爲循環計數器,而在另一個宏
3)編寫最後使用的線到CSV文件的數量,以便在下次啓動時它會繼續從停止的地方
雖然我成功了能夠實現d來自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文件由於上述問題,我尚未實現。
謝謝你的幫助!
謝謝@Shugar,真有意思在if語句中使用調用代碼,我現在理解原則,並且會從這裏進一步走下去。 – Samuel