Load each file into separate data folder
hrodstein
#pragma rtGlobals=3 // Use modern global access method and strict wave access.
// This is a general framework for loading waves from multiple files, with the waves from
// each file stored in a separate data folder.
//
// This is useful when you have many similar files, each of which containing many columns.
// You wind up with one data folder for each file. The wave names in each data folder are the same.
// The data folder name identifies the source file.
//
// You need to supply your LoadWave command where it says
// "*** Put your LoadWave command here ***"
// Other changes may be required for your situation.
static StrConstant kFileNameExtension = ".txt"
Function LoadOneFile(pathName, fileName)
String pathName // Name of symbolic path or "" for dialog
String fileName // Name of data file or "" for dialog
Variable refNum
// First get a valid reference to a file.
if ((strlen(pathName)==0) || (strlen(fileName)==0))
// Display dialog looking for file.
Open/D/R/P=$pathName/M="Select data file" refNum as fileName
fileName = S_fileName // S_fileName is set by Open/D
if (strlen(fileName) == 0) // User cancelled?
return -1
endif
endif
// Create data folder from file name
String dfName = ParseFilePath(0, fileName, ":", 1, 0)
dfName = RemoveEnding(dfName, kFileNameExtension) // e.g., "MyFile.txt" -> "MyFile"
if (DataFolderExists(dfName))
String prompt
sprintf prompt, "Data folder named '%s' exists. Click Yes to overwrite the existing data, No to cancel.", dfName
DoAlert 1, prompt
if (V_flag == 2)
Print "Load cancelled. You can rename the existing data folder and try again."
return -1 // Cancelled
endif
SetDataFolder $dfName
else
NewDataFolder/S $dfName
endif
String dataSetName = dfName
*** Put your LoadWave command here ***
SetDataFolder :: // Restore current data folder
return 0 // Success
End
Function LoadAllFilesInFolder()
String thePath="_New Path_"
Prompt thePath, "Name of path containing data files", popup PathList("*", ";", "")+"_New Path_"
DoPrompt "Choose directory containing a set of data files", thePath
if (V_flag != 0)
return -1 // User cancelled.
endif
if (CmpStr(thePath, "_New Path_") == 0) // User selected new path ?
NewPath/O data // This brings up dialog and creates or overwrites path
if (V_flag != 0)
return -1 // User cancelled
endif
thePath = "data"
endif
PathInfo $thePath
String dirPath = S_path
String fileList = IndexedFile($thePath, -1, kFileNameExtension) // List of all files in the folder
String fileName
Variable fileIndex=0
String list = ""
do
fileName = StringFromList(fileIndex, fileList) // Get name of next text file in path
if (strlen(fileName) == 0)
break // All done
endif
if (LoadOneFile(thePath, fileName) != 0)
break // Error
endif
fileIndex += 1
while (1) // Until all files done
Printf "Loaded data from \"%s\"\r", dirPath
return 0 // Success
End
// This is a general framework for loading waves from multiple files, with the waves from
// each file stored in a separate data folder.
//
// This is useful when you have many similar files, each of which containing many columns.
// You wind up with one data folder for each file. The wave names in each data folder are the same.
// The data folder name identifies the source file.
//
// You need to supply your LoadWave command where it says
// "*** Put your LoadWave command here ***"
// Other changes may be required for your situation.
static StrConstant kFileNameExtension = ".txt"
Function LoadOneFile(pathName, fileName)
String pathName // Name of symbolic path or "" for dialog
String fileName // Name of data file or "" for dialog
Variable refNum
// First get a valid reference to a file.
if ((strlen(pathName)==0) || (strlen(fileName)==0))
// Display dialog looking for file.
Open/D/R/P=$pathName/M="Select data file" refNum as fileName
fileName = S_fileName // S_fileName is set by Open/D
if (strlen(fileName) == 0) // User cancelled?
return -1
endif
endif
// Create data folder from file name
String dfName = ParseFilePath(0, fileName, ":", 1, 0)
dfName = RemoveEnding(dfName, kFileNameExtension) // e.g., "MyFile.txt" -> "MyFile"
if (DataFolderExists(dfName))
String prompt
sprintf prompt, "Data folder named '%s' exists. Click Yes to overwrite the existing data, No to cancel.", dfName
DoAlert 1, prompt
if (V_flag == 2)
Print "Load cancelled. You can rename the existing data folder and try again."
return -1 // Cancelled
endif
SetDataFolder $dfName
else
NewDataFolder/S $dfName
endif
String dataSetName = dfName
*** Put your LoadWave command here ***
SetDataFolder :: // Restore current data folder
return 0 // Success
End
Function LoadAllFilesInFolder()
String thePath="_New Path_"
Prompt thePath, "Name of path containing data files", popup PathList("*", ";", "")+"_New Path_"
DoPrompt "Choose directory containing a set of data files", thePath
if (V_flag != 0)
return -1 // User cancelled.
endif
if (CmpStr(thePath, "_New Path_") == 0) // User selected new path ?
NewPath/O data // This brings up dialog and creates or overwrites path
if (V_flag != 0)
return -1 // User cancelled
endif
thePath = "data"
endif
PathInfo $thePath
String dirPath = S_path
String fileList = IndexedFile($thePath, -1, kFileNameExtension) // List of all files in the folder
String fileName
Variable fileIndex=0
String list = ""
do
fileName = StringFromList(fileIndex, fileList) // Get name of next text file in path
if (strlen(fileName) == 0)
break // All done
endif
if (LoadOneFile(thePath, fileName) != 0)
break // Error
endif
fileIndex += 1
while (1) // Until all files done
Printf "Loaded data from \"%s\"\r", dirPath
return 0 // Success
End
Forum
Support
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More