The waves in the legend are out of order.
calichem
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
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
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:
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
April 10, 2012 at 12:11 pm - Permalink
:: Thumbs up
April 10, 2012 at 06:02 pm - Permalink
I wrote this:
I should have written this:
To see the difference, execute:
Print SortList("File1.txt;File10.txt;File2.txt;", ";", 16) // Sort wave9 before wave10
This prints:
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.
April 12, 2012 at 11:18 am - Permalink