The waves in the legend are out of order.

When I execute a legend command, all my waves are out of order in the legend.

I understand that this depends on the order that the waves were loaded into the program.

Is there an alternative to IndexedFile($pathName, index, "????") that would return waves in an abc# order? Or will I have to reorder the list on my own?

For example, currently Print IndexedFile($pathName,-1,"????") returns
il040904_4.txt;
il040904_1.txt;
il040904_2.txt;
il040904_3.txt;
il040904_9.txt;
il040904_8.txt;
il040904_5.txt;
il040904_10.txt; etc

 Function LoadYWavesFromFolder(pathName)
	String pathName  
	
        //get file path
	if (strlen(pathName) == 0)
		NewPath/O/M="Choose a folder containing dat files. . . " IndexedFilePath
		if (V_flag != 0)
			return -1				// User cancelled
		endif
		pathName = "IndexedFilePath"
	endif

	Variable index = 0
	
	do
		String fileName = IndexedFile($pathName, index, "????")
		if (strlen(fileName) == 0)
			break			// No more files.
		endif
			
		LoadWave/J/D/O/Q/K=1/L={0,0,0,1,1}/N=temp/P=$pathName fileName
		
	        //parsing filename
		if (V_flag > 0)
			String name = StringFromList(0,  S_waveNames)
			Wave w = $name
				
			String tempName = S_fileName		
			tempName = ParseFilePath(3, S_fileName, ":", 0, 0)	  // Copy basename 
			tempName = LowerStr(tempName)
			String extension = ParseFilePath(4,S_filename,":",0,0)  // Copy extension
			extension = LowerStr(extension)
			String desiredName
					
			desiredName = tempName + "_" + extension + "y"
					
			if (Exists(desiredName) != 0)
				desiredName =  UniqueName(desiredName, 1, 0)
			endif
			Rename w, $desiredName				
		endif
		index += 1
	while (1)
	printf ":: Done Loading\r" 
        return 0
End
Is there an alternative to IndexedFile($pathName, index, "????") that would return waves in an abc# order? Or will I have to reorder the list on my own?


The order in which IndexedFile returns the files depends on the operating system.

You can sort the list and process the files in sorted order like this:

Function Demo()
	String pathName = "Igor"
	String list
	
	list = IndexedFile($pathName, -1, ".txt")
	list = SortList(list, ";", 16)			// Sort wave9 before wave10
	
	Variable numItems = ItemsInList(list)
	Variable i
	for(i=0; i<numItems; i+=1)
		String fileName = StringFromList(i, list)
		Print i, fileName
	endfor
End

I made a mistake, which I have now corrected, in my post above.

I wrote this:

	list = SortList(list, ";", 2)			// Numeric sort


I should have written this:

	list = SortList(list, ";", 16)			// Sort wave9 before wave10


To see the difference, execute:

Print SortList("File1.txt;File10.txt;File2.txt;", ";", 2)	// Numeric sort
Print SortList("File1.txt;File10.txt;File2.txt;", ";", 16)	// Sort wave9 before wave10


This prints:

File1.txt;File10.txt;File2.txt;		// Numeric sort (options = 2)
File1.txt;File2.txt;File10.txt;		// Sort wave9 before wave10 (options = 16)


The examples for SortList show that the numeric sort (2) is intended for when the list contains only numbers while the other one (16) is intended for cases like yours where you have a name followed by a number and you want the number to be treated numerically rather than alphabetically in the sort if the name for two items is the same.