Update:

I have almost got this working, but have hit the point where I need some more help. If anyone can suggest a solution or see where I'm going wrong, I'd greatly appreciate some advice.

My CSV data's format has changed slightly:
AUD/USD,Buy 0.04 Lots at 0.7213 Stop.,- IF DONE -,Sell 0.04 Lots at 0.7113 Stop - OCO - MOC.
AUD/USD,Sell 0.04 Lots at 0.7023 Stop.,- IF DONE -,Buy 0.04 Lots at 0.7123 Stop - OCO - MOC.
EUR/USD,Buy 0.02 Lots at 1.1625 Stop.,- IF DONE -,Sell 0.02 Lots at 1.1444 Stop - OCO - MOC.
EUR/USD,Sell 0.02 Lots at 1.1220 Stop.,- IF DONE -,Buy 0.02 Lots at 1.1401 Stop - OCO - MOC.
USD/JPY,Buy 0.03 Lots at 121.6742 Stop.,- IF DONE -,Sell 0.03 Lots at 120.0531 Stop - OCO - MOC.
USD/JPY,Sell 0.03 Lots at 116.9908 Stop.,- IF DONE -,Buy 0.03 Lots at 118.6119 Stop - OCO - MOC.

I am now able to grab all of the values I need with the exception of the stop value in every second row (that is, the value before the phrase "Stop - OCO - MOC." in every second row).

I've got to say, I am at my wits end with this! I just can't work out why my code parses all the values except every other row's stop. I think it must be something to do with the data itself, but I can't see what. Here's my code:

Code:
string Name = "Data\\systematic.csv";  // name of the CSV file
string readTrade(string csv,
	string*	tAsset,
	string*	tType,
	float*	tLots,
	float* tEntry,
	float* tStop
	)
{
	string nextline = strstr(csv,"\n");
	if(nextline) nextline++;
//	else return nextline;
	
	string separator = strstr(csv,",");
	if(separator) separator = ",";
	else separator = ";"; 
		
	string s = strtok(csv,separator); //symbol
//		printf("\n%s", s);

	*tAsset = s; 
	*tType = strtok(NULL, " ");
//	printf("\n%s", *tType);
	sscanf(strtok(NULL," "), "%f", tLots);
//	printf("\n%f", *tLots);
	strtok(NULL, " "); //"Lots"
	strtok(NULL, " "); //"at"
	
	sscanf(strtok(NULL," "), "%f", tEntry); //Entry
	
	strtok(NULL,"separator"); //End of second column
	
	strtok(NULL,"separator"); //Third column
	
	strtok(NULL," "); //"Sell/Buy"
	strtok(NULL, " "); //"lots to close"
	strtok(NULL, " "); //"Lots"
	strtok(0, " "); //"at"
	
	sscanf(strtok(NULL," "), "%f", tStop); //Stop

	return nextline;
}
	
function run()
{
	set(LOGFILE);
	Verbose = 30;
	LookBack = 0;
	Hedge = 2;
//	if(is(LOOKBACK) || is(TRADING))
//		return;
		
	if(!file_date(Name))
		quit("File not found!");
	string content = file_content(Name);
	string tAsset = "", tType = "";
	float tLots;
	float tEntry;
	float tStop;
			
	while(content) { 
		content = readTrade(content,&tAsset,&tType,&tLots,&tEntry,&tStop);
printf("\n%s, %f, %f", tAsset, (var)tEntry, (var)tStop);
		}
		

}



And the output of the printf - each row should reflect a row in the original CSV, but the second number is not updated.
[1: Mon 04.01.10 00:00] 83.150-83.120-83.230-83.170
AUD/USD, 0.721300, 0.711300
AUD/USD, 0.702300, 0.711300
EUR/USD, 1.162500, 1.144400
EUR/USD, 1.122000, 1.144400
USD/JPY, 121.674202, 120.053101
USD/JPY, 116.990799, 120.053101
GBP/USD, 1.563300, 1.552500
GBP/USD, 1.548500, 1.552500
USD/CAD, 1.341800, 1.328500
USD/CAD, 1.321800, 1.328500
EUR/JPY, 137.117203, 135.667801
EUR/JPY, 135.667801, 135.667801