Mysterious issue with loading a list of files (resolved: changing name of wave doesn't change the references to it)

I made a function that takes a string and then loads all the files which have filenames starting with that string. It works, EXCEPT for the very last file. The puzzling part is that every matching filename shows up in the list, matchingWavesList. I don't understand why the last filename in this list fails to load.

// load_allWavesLikeTemplate:
//		Say you have a bunch of text-delimited files that all start with "file_".
//		This function loads all of those files, and makes a reference wave that
//		points to all of them.
// parameters:
//		nameTemplate : a string that tells how all the file names should start
//		pathSTring : a string w/ the complete path the folder with all the files
//		df : a data folder in igor where all the loaded waves will be kept
//	outputs:
//		- one wave for each file name that matched the template
//		- *nameTemplate*_All : a wave of references that points to all the loaded waves
Function load_allWavesLikeTemplate(nameTemplate, mode, [pathString, df, wOutName])
	String nameTemplate, mode, pathString, wOutName
	DFREF df
	
	DFREF saveDFR = GetDataFolderDFR()
	
	if (!ParamIsDefault(pathString))
		NewPath/O myPath, pathString
	else
		NewPath/O myPath
	endif
	
	if (!ParamIsDefault(df))
		SetDataFolder df
	endif
		
	String allFileList = IndexedFile(myPath, -1, "????")
	
	String/G matchingWavesList = "" // #todo: remove this /G later
	String fileName
	Variable i, imax = ItemsInList(allFileList), isMatch
	for (i=0; i<imax; i+=1)
		fileName = StringFromList(i, allFileList)
		isMatch = StringMatch(fileName, nameTemplate + "*")
		if (isMatch)
			matchingWavesList = AddListItem(fileName, matchingWavesList)
		endif
	endfor
	
	// Put the file lists in order
	matchingWavesList = SortList(matchingWavesList, ";", 16)
	
	// Make a waves to store references to all the loaded waves
	String refWaveName
	if (!ParamIsDefault(wOutName))
		refWaveName = wOutName + "_All"
	else
		refWaveName = nameTemplate + "_All"
	endif
	Make/WAVE/O/N=(itemsInList(matchingWavesList)) $refWaveName
	Wave/WAVE refWave = $refWaveName
	
	// Load all the waves
	imax = ItemsInList(matchingWavesList)
	String wName
	for (i=0; i<imax; i+=1)
		fileName = StringFromList(i, matchingWavesList)
		// Print "fileName = " + fileName // #todo: remove this print statement later
		LoadWave/Q/J/M/D/N=wIn/K=0/P=myPath fileName
		Wave wIn0
		if (!ParamIsDefault(wOutName))
			wName = wOutName + "_" + num2str(i)
		else
			wName = fileName // I may decide to use a different name
		endif
		
		if (StringMatch(mode, "1d"))
			Make/O/D/N=(DimSize(wIn0,1)) $wName = wIn0[0][p]
		elseif (StringMatch(mode, "2d"))
			Rename wIn0, $wName
		endif
		Wave oneWave = $wName
		refWave[i] = oneWave
	endfor
	
	KillWaves wIn0
End

 

If mode=="2d" then the KillWaves statement at the end kills the last wave loaded. The fact that you have renamed the wave does not change the fact that the wIn0 wave reference refers to that wave. You could fix this by changing:

Rename wIn0, $wName

to

Duplicate/O wIn0, $wName

If that does not solve the problem then I recommend you single-step through the second loop using the debugger:

DisplayHelpTopic "The Debugger"

 

Thank you hrodstein! That was exactly the issue.

I've never used, or even heard of, the debugger. I look forward to learning about it, and will try it out the next time I have a mysterious issue.