Announcement

Collapse
No announcement yet.

error driving me insane - but can't see what's wrong

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • kingzooly
    replied
    Originally posted by mrdude View Post
    Thanks look at post #5 I already found the fault, when the string was getting search it was always starting from 0 so when it found a duplicate IP it always had the same address and filled a table with that address (and got stuck in a loop), now I know what the problem is I can fix it easily. Thanks again though for your help as I appreciate it.
    Not a problem, I would say use the debug tool but it always crashs on me so what I do these days is throw a dialog box in there testing easy part so I know its doing what I should glad you found it and I really glad you came back and explained witch part you found and fixed not many do that, hope your project success.

    Leave a comment:


  • mrdude
    replied
    Originally posted by kingzooly View Post
    I know it will be a pain but have it do a dialog on each IP but add a count in the while so each time to adds one and make that the Dialogs title so you know its grabbing the IP's and finding them right lets see where its going wrong mabe that function does not return nil you see so try this maybe also fomate your code lol


    Code:
    MeCount = 0;
    
    while( find1 ~= nil) do
    	find1 = string.match(mystring, regex, nextposition);
    	if find1 == nil then
    		break
    	else
    		MeCount = MeCount +1;
    		
    		Dialog.Message("IP Found No:"..MeCount, "I found: "..find1, MB_OK, MB_ICONNONE, MB_DEFBUTTON1);
    		
    		result = Table.Count(target_table);
    		if result >= 10 then
    			Dialog.Message("Notice", "This page contains duplicate IP addresses\r\n" .. "Breaking out of a loop now\r\n" .. "Please check manually", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
    			break
    		else	
    			strip()
    		end
    	end
    end
    Try that to see what you get on the 3ed loop like I said you might not return nil it might be "" or -1
    Thanks look at post #5 I already found the fault, when the string was getting search it was always starting from 0 so when it found a duplicate IP it always had the same address and filled a table with that address (and got stuck in a loop), now I know what the problem is I can fix it easily. Thanks again though for your help as I appreciate it.

    Leave a comment:


  • kingzooly
    replied
    Originally posted by mrdude View Post
    If I change the while loop to this:

    Code:
    while( find1 ~= nil) do
    	find1 = string.match(mystring, regex, nextposition)
    	if find1 == nil then
    		break
    	else
    	result = Table.Count(target_table);
    	if result >= 10 then
    	Dialog.Message("Notice", "This page contains duplicate IP addresses\r\n" .. "Breaking out of a loop now\r\n" .. "Please check manually", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
    	break
    	else	
    	strip()
    end
    end
    end
    It breaks out once the table generated is equal or greater than 10 - If the search string doesn't contain identical IP's it put's them in the table until the table reaches 10 entries - if there is more than 1 identical address - every table entry is filled with that one IP.
    That shows where my problem is
    I know it will be a pain but have it do a dialog on each IP but add a count in the while so each time to adds one and make that the Dialogs title so you know its grabbing the IP's and finding them right lets see where its going wrong mabe that function does not return nil you see so try this maybe also fomate your code lol


    Code:
    MeCount = 0;
    
    while( find1 ~= nil) do
    	find1 = string.match(mystring, regex, nextposition);
    	if find1 == nil then
    		break
    	else
    		MeCount = MeCount +1;
    		
    		Dialog.Message("IP Found No:"..MeCount, "I found: "..find1, MB_OK, MB_ICONNONE, MB_DEFBUTTON1);
    		
    		result = Table.Count(target_table);
    		if result >= 10 then
    			Dialog.Message("Notice", "This page contains duplicate IP addresses\r\n" .. "Breaking out of a loop now\r\n" .. "Please check manually", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
    			break
    		else	
    			strip()
    		end
    	end
    end
    Try that to see what you get on the 3ed loop like I said you might not return nil it might be "" or -1

    Leave a comment:


  • mrdude
    replied
    If I change the while loop to this:

    Code:
    while( find1 ~= nil) do
    	find1 = string.match(mystring, regex, nextposition)
    	if find1 == nil then
    		break
    	else
    	result = Table.Count(target_table);
    	if result >= 10 then
    	Dialog.Message("Notice", "This page contains duplicate IP addresses\r\n" .. "Breaking out of a loop now\r\n" .. "Please check manually", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
    	break
    	else	
    	strip()
    end
    end
    end
    It breaks out once the table generated is equal or greater than 10 - If the search string doesn't contain identical IP's it put's them in the table until the table reaches 10 entries - if there is more than 1 identical address - every table entry is filled with that one IP.
    That shows where my problem is

    Leave a comment:


  • mrdude
    replied
    Thanks, if I change the strip function to this:

    Code:
    function strip()
       strip0 = String.Replace(find1, "<span>", "", false); -- remove <span> from the start of string
       strip1 = String.Replace(strip0, "</span>", "", false); -- remove </span> from the string so we are left with the IP
       result1 = String.Find(mystring, find1, 1, false); --get the start position of the IP
       nextposition = result1+1 --store the found address then add 1 so we can find the next ip address from this position   
       ---put check for dupe here:
       Dialog.Message("Notice", nextposition, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
       --end of check:  
       Table.Insert(target_table, Table.Count(target_table)+1, strip1); -- count the previous entries in our table then add our new string to the last entry.
    end
    and then the add a break in here:

    Code:
    while( find1 ~= nil) do
    	find1 = string.match(mystring, regex, nextposition)
    	if find1 == nil then
    		break
    	else
    	strip()
    	break
    	end
    end
    I can see that if a there are more than 1 IP address found that is the same it always returns to the same address (this is causing the infinite loop), I need to somehow get if to store that first found address and then ignore it and move on, it works ok if the string it searches doesn't have matching IP's in the file, so it's nothing to do with the search pattern I'm using.

    Cheers.

    Leave a comment:


  • kingzooly
    replied
    Originally posted by mrdude View Post
    I think this part is stuck in an infinite loop:

    Code:
    while( find1 ~= nil)  --do a loop to check for more IP's
    do
    	find1 = string.match(mystring, regex, nextposition) --find the ip address in a string
    if find1 == nil then
       break -- exit out of loop
       elseif find1 ~= nil then
       strip()
    end
    end
    I think when it finds the duplicate IP it just keeps repeating -and reading that same IP over and over, but how would I put a check in here so it only reads once then continues to the next position in the file it's checking?
    This While is a little clearner don't need to check if its not nil again if you already know it does not = nil in the first place.

    Code:
    while( find1 ~= nil) do
    	find1 = string.match(mystring, regex, nextposition)
    	if find1 == nil then
    		break
    	else
    		strip()
    	end
    end
    I would say try looking at the Patten again maybe, if you could post a example of what your doing when I have 2 mins I can see if it does it this end and see if I can make it work with my brain that I don't have much of lol

    Leave a comment:


  • mrdude
    replied
    I think this part is stuck in an infinite loop:

    Code:
    while( find1 ~= nil)  --do a loop to check for more IP's
    do
    	find1 = string.match(mystring, regex, nextposition) --find the ip address in a string
    if find1 == nil then
       break -- exit out of loop
       elseif find1 ~= nil then
       strip()
    end
    end
    I think when it finds the duplicate IP it just keeps repeating -and reading that same IP over and over, but how would I put a check in here so it only reads once then continues to the next position in the file it's checking?

    Leave a comment:


  • kingzooly
    replied
    First note I can see here is that lua uses "Lua patterns" not regex so maybe you have to check that your patten is the corect format for lua, even it been the same ip shouldn't brake it.

    One of the whiles/loops could be creating a lock up its the only thing that makes sense as there is no other code in there what's really hard on AMS

    Leave a comment:


  • error driving me insane - but can't see what's wrong

    I have three files with the following values:

    file 1 contains:
    <span>192.168.100.1</span><br>
    <span>192.168.100.2</span><br>

    file 2 contains:
    <span>192.168.100.1</span><br>
    <span>192.168.100.1</span><br>

    file 3 is just empty:


    Code:
    --try reading last Folder from Registry
    LastFolder = Application.LoadValue("MultiThief", "LastFolder");
    checkforfolder = Folder.DoesExist(LastFolder);
    
    if checkforfolder == true then
    --do nothing
    elseif checkforfolder == false then
      LastFolder = _DesktopFolder;
    end;
    
    target_table = {};    --Creates a table whose values are empty
    sections2 = {};    --Creates a table whose values are empty
    
    webpage = Dialog.FileBrowse(true, "Locate File", LastFolder, "All Files (*.*)|*.*|", "", ".*", false, false);
    
    if (webpage[1] == "CANCEL") then
    Application.ExitScript();
    --removehtml()
    elseif (webpage[1] ~= "CANCEL") then
    mystring = TextFile.ReadToString(webpage[1]);
    --removehtml()
    end
    
    startposition = "0"
    
    regex = "<span>" .. '[0-9+\.]+' .. "</span>"
    	find1 = string.match(mystring, regex,startposition) --find the ip address in a string
    
    function strip()
       strip0 = String.Replace(find1, "<span>", "", false); -- remove <span> from the start of string
       strip1 = String.Replace(strip0, "</span>", "", false); -- remove </span> from the string so we are left with the IP
       result1 = String.Find(mystring, find1, 1, false); --get the start position of the IP
       nextposition = result1+1 --store the found address then add 1 so we can find the next ip address from this position
       Table.Insert(target_table, Table.Count(target_table)+1, strip1); -- count the previous entries in our table then add our new string to the last entry.
    end
    
    
    if find1 == nil then
        Dialog.Message("Notice", "No IP addresses found", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1); --prevent error message if no IP addresses were found
        Application.ExitScript(); --no point carrying on if no IP addresses are found.
        elseif find1 ~= nil then
        strip()
    end
    
    
    while( find1 ~= nil)  --do a loop to check for more IP's
    do
    	find1 = string.match(mystring, regex, nextposition) --find the ip address in a string
    if find1 == nil then
       break -- exit out of loop
       elseif find1 ~= nil then
       strip()
    end
    end
    --------------------------------------
    --error above here
    --------------------------------------
    
    filename = "AutoPlay\\Docs\\Config\\reaper.ini"
    sections2 = INIFile.GetSectionNames(filename);
    filestart = "/files/"
    
    table_values = Table.Concat(target_table, "\r\n", 1, TABLE_ALL);
    choice = Dialog.Message("IP's Found - would you like to download", table_values, MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
    then some unimportant code under that...


    If file1 gets checked - I don't get any errors
    If file3 gets checked - I don't get any errors

    If file 2 gets checked - the app freezes with no errors, I know it's because both IP addresses found are the same but I don't know why it's freezing the app, does anyone have any idea? I have been at this for about 6 hours now and am no further forward that when I was when I begun.

    Cheers.
Working...
X