Why Experts Exchange?

Experts Exchange always has the answer, or at the least points me in the correct direction! It is like having another employee that is extremely experienced.

Jim Murphy
Programmer at Smart IT Solutions

When asked, what has been your best career decision?

Deciding to stick with EE.

Mohamed Asif
Technical Department Head

Being involved with EE helped me to grow personally and professionally.

Carl Webster
CTP, Sr Infrastructure Consultant
Ask ANY Question

Connect with Certified Experts to gain insight and support on specific technology challenges including:

Troubleshooting
Research
Professional Opinions
Ask a Question
Did You Know?

We've partnered with two important charities to provide clean water and computer science education to those who need it most. READ MORE

troubleshooting Question

Synchronous vs Asynchronous processing in Flash

Avatar of dyarosh
dyarosh asked on
Adobe Flash
2 Comments1 Solution402 ViewsLast Modified:
I'm new to Flash and have a problem that I'm not sure how to solve.  I have a search function in my flash program that searches an XML file for the criteria entered.  So far so good.  That part works.  The XML file contains info on many abstracts such as the title, authors and a synopsis of the abstract.  The criteria entered is searched in each abstract and if found, returns the abstract and proceeds to the next abstract.  If the criteria is not found, then I want to load the abstract (txt file) and search the entire abstract for the criteria.  I have the code for loading the abstract (shown below) but I don't know how to halt processing until the abstract is loaded and searched.  In other words, I don't want to move on to the next abstract until the current abstract has been completely searched.

Any help would be greatly appreciated.
// Import Global variables
import AAPglobal;

//disable not found text
notFound_Text.visible = false;

//handle the button click
SearchBtn.addEventListener(MouseEvent.CLICK, searchAbstracts);
SearchBtn.useHandCursor = true;
stop();

//------------------ Functions ----------------------------
function searchAbstracts(e:Event):void
{
	// For each abstract, check the Title, Synopsis, Authors and Affiliations for the keywords entered.
	// Once a keyword is found in an abstract, the next abstract is checked.  Don't need to check each keyword
	// once one is found in an abstract.
	var abstractCount:Number = AAPglobal.AbstractList.length();		// Get the number of Abstracts
	var wordFound:Boolean = false;									// True if word found in Abstract
	var searchFound:Boolean = false;								// True if any abstracts found
	var delimFound:Number = -1;										// Greater than -1 if ; separator found in word list
	var wordSearch:String = "";										// Holds the words to find
	var wordStr:String = "";										// Holds the individual search string
	var titleStr:String = "";										// Holds the Title String Converted to uppercase
	var synopsisStr:String = "";									// Holds the Synopsis String Converted to uppercase
	var authorsStr:String = "";										// Holds the Authors String converted to uppercase
	var affiliationsStr:String = "";								// Holds the Affiliations String converted to uppercase
	var temparray:Array = new Array();								// Holds the abstract numbers found during search
	var fullSearchFound = -1;
	
	// Loop through each Abstract
	for (var i:Number = 0; i < abstractCount; i++)
	{
		// Add ; to end of string in case user forgets to put one
		wordSearch = searchFor.text + ";";

		// Convert words to uppercase for comparison
		wordSearch = wordSearch.toUpperCase()
		
		// Loop through each word in the search
		while (wordSearch != "")
		{
			// Set wordFound to false for each search criteria
			wordFound = false;
			
			// Find the ; delimeter
			delimFound = wordSearch.indexOf(";");
	
			// If found, there is a word to search for
			if (delimFound > 0)
			{
				// Get the search string
				wordStr = wordSearch.substring(0, delimFound);
				trace(wordStr);
				
				// Search Title and Synopsis for the search string
				titleStr = AAPglobal.AbstractList[i].title.toUpperCase();
				synopsisStr = AAPglobal.AbstractList[i].synopsis.toUpperCase();
				if (titleStr.search(wordStr) > -1 || synopsisStr.search(wordStr) > -1)
				{
					wordFound = true;
					trace("wordFound in title/synopsis");
					searchFound = true;
					break;		// breaks from While loop
				}		// end if
				
				// Search Authors and Affiliations
				for (var j:Number = 0; j < AAPglobal.AbstractList[i].authors.length(); j++)
				{
					authorsStr = AAPglobal.AbstractList[i].author[j].name.toUpperCase();
					affiliationsStr = AAPglobal.AbstractList[i].author[j].affiliations.toUpperCase();
					if (authorsStr.search(wordStr) > -1 || affiliationsStr.search(wordStr) > -1)
					{
						wordFound = true;
						trace("wordFound in Authors");
						searchFound = true;
						break;			// breaks from for j loop
					}		// end if				
				}  		// end for j loop
			}		// end if delim 
			
			// If search string found, move to next abstract, don't need to search for any more words
			if (wordFound) {
				break;		// break while loop
			}
			
			// Remove searched word from list
			wordSearch = wordSearch.substr(delimFound+1); 
		}		// end while loop
		
		// If search criteria found in abstract, add to temp_array
		if (wordFound) {
			// Search criteria found in abstract, add abstract to list
			trace("wordFound in Abstract " + AAPglobal.AbstractList[i].abstractnumber.toString());
			temparray.push(AAPglobal.AbstractList[i].abstractnumber.toString())
			searchFound = true;
		} else {
			// Search criteria not found in quick search of abstract, load entire abstract text and search again
			trace("Searching Full Abstract");
			wordSearch = searchFor.text + ";";
			fullSearchFound = -1;
			fullSearchFound = FullSearch(AAPglobal.AbstractList[i].abstractnumber.toString(), AAPglobal.AbstractList[i].searchTXT, wordSearch);
			if (fullSearchFound > -1)
			{
				trace("Search Criteria found in Full Search in Abstract " + fullSearchFound);
			}
		}
	}		// end for i loop

	// If any search criteria found, display abstracts
	if (searchFound) {
		AAPglobal.AbstractSearchResults = temparray;
		AAPglobal.SearchinProgress = true;
		gotoAndPlay("titlesList");
	}
	else {
		notFound_Text.visible = true;
	}
}

function FullSearch(abstractNO:String, fileName:String, searchCriteria:String):Number
{
	//load the abstract text file
	var textLoader:URLLoader = new URLLoader();							// variable used to load text file
	var textReq:URLRequest = new URLRequest(fileName);					// set request to abstract file text name

	// Define the loader complete event
	textLoader.addEventListener(Event.COMPLETE, textLoadComplete);
	textLoader.load(textReq);

	// This is where I want to put the code to finish searching the abstract but if I use an Event Listener,
	// program flow will go to the textLoadComplete function.  

}
ASKER CERTIFIED SOLUTION
Avatar of GarrettChristopherson
GarrettChristopherson

Our community of experts have been thoroughly vetted for their expertise and industry experience.

Commented:
This problem has been solved!
Unlock 1 Answer and 2 Comments.
See Answers