using original datafile names when loading waves thru LoadWave

Hello all, I am trying to name the waves created thru LoadWave using original names of the datafiles. I thought, I would use global $S_waveNames and $S_fileName in Duplicate to do so but it gives me an error Duplicate error: expected wave name. Any help is appreciated.

Thanks,
Vishi

Function CustomWaveSelect(fileName, pathName)
    String pathName // Name of Igor symbolic path or ""
    String filePath     // Full path, partial path or file name

	if (V_Flag)
		return -1 // User canceled
	endif
	// Load the waves and set the local variables.
	LoadWave/M/J/D/O/P=$pathName fileName
	Duplicate/O $S_waveNames, $S_fileName
	if (V_flag==0) // No waves loaded. Perhaps user canceled.
		return -1
	endif
End
S_waveNames is a semicolon-separated list of waves loaded. So if LoadWave loaded one wave, S_waveNames would be something like "wave0;". Semicolon is not allowed in wave names. That is why you are getting this error.

Here is how I would do it:

Function CustomWaveLoad(pathName, filePath)
	String pathName	// Name of Igor symbolic path or ""
	String filePath		// Full path, partial path or file name

	if (strlen(filePath) == 0)			// Want Open File dialog?
		Open/D/R/P=$pathName refNum as filePath
		if (strlen(S_fileName) == 0)
			return -1				// User canceled.
		endif
		filePath = S_fileName		// This is a full path.
	endif

	// Get just the fileName but with the extension remove.
	String wName = ParseFilePath(3, filePath, ":", 0, 0)
	wName = CleanupName(wName, 0)	// Change 0 to 1 if you want to allow liberal names
	
	// Get string to pass to LoadWave /B flag to set wave name
	String columnInfo
	sprintf columnInfo, "N='%s';", wName 

	// Load the waves and set the local variables.
	LoadWave/M/J/D/O/B=columnInfo/P=$pathName filePath
	
	return V_flag		// Number of waves loaded
End


If your data contains just numbers (no NaNs, dates, text data), then I recommend using LoadWave/G instead of LoadWave/D. The reason is that LoadWave/G will find the data in the file, skipping any header information, whereas LoadWave/D needs to be told where (on what line) the data starts. However, if the file contains nothing but numbers, both LoadWave/G and LoadWave/D will work fine.

If you are not familiar with Igor symbolic paths, execute this to read the help:

DisplayHelpTopic "Symbolic Paths"

 

 

Great! Thanks so much. I've commentized /if (strlen(filePath) == 0) because I want it to loop thru the number of files the user chooses to plot/analyze and it works. A separate thanks for your bonus tips on how to clean the file name and strip it off the extension. Thanks a lot!

Vishi

 

 

//if (strlen(filePath) == 0)			// Want Open File dialog?
		Open/D/R/P=$pathName refNum as filePath
		if (strlen(S_fileName) == 0)
			return -1				// User canceled.
		endif
		filePath = S_fileName		// This is a full path.
//	endif