Riviera_Phill Posted February 4, 2015 Share Posted February 4, 2015 Hi, I've written a script which reads a log file, identifies particular errors and then extracts the message IDs (it's a mail archiving server) and writes these to an SQL script file. In order to do this I need to move the data between 3 different arrays, but I seem to be having an issue creating the second one in the chain $aAllMsgIDs, the scrip compiles OK but I get "Error: Subscript used with non-Array variable" when I run it: Please can someone take a look at the code below and see if they can spot the error? I'm pretty sure its something to do with how I've used _ArrayAdd but I can't see what. expandcollapse popupDim $aEASIndexerLog, $aAllMsgIDs, $aUniqueMsgIDs, $LogEntry, $MsgID, $file1, $LastEntry, $ErrorMsg, $NewLastEntry #Include <Array.au3> #Include <File.au3> #include <String.au3> ; Read contents of EASIndexer.log into an array If Not _FileReadToArray('d:\easlog\EASIndexer.log', $aEASIndexerLog) Then ; If failed to open PSTList write an error and exit WriteToErrorLog('Unable to open EASIndexer.log') Exit EndIf ; Create Script file to write too (any existing file will be deleted) $file1 = FileOpen('d:\BadMsgIDs\BadMsgIDs.sql', 10) ; Write 1st line of SQL code FileWriteLine($file1, "update ft_notify set typefld ='Z' where msgid in (") ;_ArrayDisplay($aEASIndexerLog) ;do for each line in the array For $x = 1 to $aEASIndexerLog[0] Step 1 ; Load the log entry from the array $LogEntry = StringStripWS($aEASIndexerLog[$x],2) If StringInStr($LogEntry,'openMsg: Error working with MsgID=') <> 0 Then $MsgID=StringLeft(StringRight($LogEntry,129),8) _ArrayAdd($aAllMsgIDs, $MsgID) Else ContinueLoop EndIf Next _ArrayDisplay($aAllMsgIDs) $aUniqueMsgIDs = _ArrayUnique($aAllMsgIDs) _ArrayDisplay($aUniqueMsgIDs) For $x = 1 to $aUniqueMsgIDs[0] Step 1 FileWriteLine($file1, $aUniqueMsgIDs[$x] & ',') Next FileWriteLine($file1, $MsgID & ')') FileClose($file1) Exit Many thanks in adavance, Phill. Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted February 4, 2015 Moderators Share Posted February 4, 2015 (edited) You never declared $aAllMsgIDs as an array.Dim $aEASIndexerLog, $aAllMsgIDs[], $aUniqueMsgIDs, $LogEntry, $MsgID, $file1, $LastEntry, $ErrorMsg, $NewLastEntry Edit: BTW, what version of autoit are you using? Edited February 4, 2015 by SmOke_N Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
Riviera_Phill Posted February 4, 2015 Author Share Posted February 4, 2015 Hi, Many thanks for your reply. Tried the fix, got a sytax error when compiling, checked the version, I was on 3.3.8.1 so updated to 3.3.12.0, recompiled with no errors, but I now get a run error "Line 5....Error: Variable subscript badly formatted" not sure what's causing this now. expandcollapse popupDim $aEASIndexerLog[], $aAllMsgIDs[], $aUniqueMsgIDs[], $LogEntry, $MsgID, $file1, $LastEntry, $ErrorMsg, $NewLastEntry #Include <Array.au3> #Include <File.au3> #include <String.au3> ; Read contents of EASIndexer.log into an array If Not _FileReadToArray('d:\easlog\EASIndexer.log', $aEASIndexerLog) Then ; If failed to open PSTList write an error and exit WriteToErrorLog('Unable to open EASIndexer.log') Exit EndIf ; Create Script file to write too (any existing file will be deleted) $file1 = FileOpen('d:\BadMsgIDs\BadMsgIDs.sql', 10) ; Write 1st line of SQL code FileWriteLine($file1, "update ft_notify set typefld ='Z' where msgid in (") _ArrayDisplay($aEASIndexerLog) ;do for each line in the array For $x = 1 to $aEASIndexerLog[0] Step 1 ; Load the log entry from the array $LogEntry = StringStripWS($aEASIndexerLog[$x],2) If StringInStr($LogEntry,'openMsg: Error working with MsgID=') <> 0 Then $MsgID=StringLeft(StringRight($LogEntry,129),8) _ArrayAdd($aAllMsgIDs, $MsgID) Else ContinueLoop EndIf Next _ArrayDisplay($aAllMsgIDs) $aUniqueMsgIDs = _ArrayUnique($aAllMsgIDs) _ArrayDisplay($aUniqueMsgIDs) For $x = 1 to $aUniqueMsgIDs[0] Step 1 FileWriteLine($file1, $aUniqueMsgIDs[$x] & ',') Next FileWriteLine($file1, $MsgID & ')') FileClose($file1) Exit Thanks, Phill. Link to comment Share on other sites More sharing options...
water Posted February 4, 2015 Share Posted February 4, 2015 Don't use Dim, try Global: Global $aEASIndexerLog[], $aAllMsgIDs[], $aUniqueMsgIDs[], $LogEntry, $MsgID, $file1, $LastEntry, $ErrorMsg, $NewLastEntry My UDFs and Tutorials: Spoiler UDFs:Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - WikiExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example ScriptsOutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - WikiOutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - DownloadOutlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - WikiPowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - WikiTask Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs:Excel - Example Scripts - WikiWord - Wiki Tutorials:ADO - WikiWebDriver - Wiki Link to comment Share on other sites More sharing options...
Riviera_Phill Posted February 4, 2015 Author Share Posted February 4, 2015 Humm, looks like quite a bit changed between versions, I think I'm going to have to re-write this from the ground up rather than trying to edit it. Thanks for your help guys. Phill. Link to comment Share on other sites More sharing options...
water Posted February 4, 2015 Share Posted February 4, 2015 To see what has changed I suggest to have a look at the Changelog in the help file. There you'll find a link to the script breaking changes. This are the areas where you need to brush up your scripts My UDFs and Tutorials: Spoiler UDFs:Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - WikiExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example ScriptsOutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - WikiOutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - DownloadOutlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - WikiPowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - WikiTask Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs:Excel - Example Scripts - WikiWord - Wiki Tutorials:ADO - WikiWebDriver - Wiki Link to comment Share on other sites More sharing options...
Riviera_Phill Posted February 4, 2015 Author Share Posted February 4, 2015 These changes have cost me a days work so far OK, I cant figure out how to change the loop so that it executes once per row of the array, the old code looked like this: For $x = 1 to $aEASIndexerLog[0] Step 1 ; Load the log entry from the array $LogEntry = StringStripWS($aEASIndexerLog[$x], $STR_STRIPTRAILING) If StringInStr($LogEntry, "openMsg: Error working with MsgID=") <> 0 Then $MsgID=StringLeft(StringRight($LogEntry,129),8) _ArrayAdd($aAllMsgIDs, $MsgID) Else ContinueLoop EndIf Next I think I have to change the format of For..to..step..next loop but I've looked in the help and can't find what, sorry to keep asking for help but I only write scripts occasioanly. Thanks again. Phill. Link to comment Share on other sites More sharing options...
Riviera_Phill Posted February 4, 2015 Author Share Posted February 4, 2015 Sorry, ignor that last message, I've found it, I have to use UBound. Phill. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now