Load and Concatenate All Files in a Folder
hrodstein
#pragma rtGlobals=3 // Use modern global access method and strict wave access.
// This example shows how to load all of the files in a folder and concatenate the data from each file.
// You will need to customize this for your application.
// In this example, the file contains four columns:
// Date Time CH4_dry CO2_dry
// The date and time column are combined into one date/time wave.
// After all files are loaded, the data is sorted by date/time.
// To customize this, you will need to understand Igor's data loading. For background information, execute:
// DisplayHelpTopic "Loading Waves"
// For background information on loading data programmatically, execute:
// DisplayHelpTopic "Loading Waves Using Igor Procedures"
Menu "Load Waves"
"Load One File...", LoadOneFile("", "")
"Load And Concatenate All Files in Folder...", LoadAndConcatenateAllFiles("")
End
static StrConstant kFileNameExtension = ".dat"
// LoadOneFile(pathName, fileName)
// Produces the following waves: DateTimeW, CH4_dry, CO2_dry
Function LoadOneFile(pathName, fileName)
String pathName // Name of an Igor symbolic path or "".
String fileName // Name of file or full path to file.
// First get a valid reference to a file.
if ((strlen(pathName)==0) || (strlen(fileName)==0))
// Display dialog looking for file.
Variable refNum
Open/D/R/F=kFileNameExtension/P=$pathName refNum as fileName
fileName = S_fileName // S_fileName is set by Open/D
if (strlen(fileName) == 0) // User cancelled?
return -1
endif
endif
String columnInfoStr = " "
columnInfoStr += "N='DateW,F=6;" // Load DATE column - will become date/time wave
columnInfoStr += "N='TimeW',F=7;" // Load TIME column
columnInfoStr += "N='CH4_dry';" // Load CH4_dry
columnInfoStr += "N='CO2_dry';" // Load CO2_dry
LoadWave /J /D /K=0 /A /B=columnInfoStr /Q /R={English, 1, 2, 1, 1, "Year-Month-DayofMonth", 40} /P=$pathName fileName
Variable numWavesLoaded = V_flag // V_flag is set by LoadWave
if (numWavesLoaded != 4)
Print "Error loading file - wrong number of waves loaded"
return -1
endif
Wave DateTimeW,TimeW // Create reference to waves created by LoadWave
DateTimeW += TimeW // Add time to date to obtain date/time
KillWaves/Z TimeW // This is no longer needed
return 0 // Success
End
// LoadAndConcatenateAllFiles(pathName)
// Loads all files in specified folder with extension specified by kFileNameExtension.
// The output waves are: DateTimeW, CH4_dry, CO2_dry
// All loaded waves are concatenated, creating the output waves in the current data folder.
// If the output waves already exist in the current data folder, this routine appends to them.
Function LoadAndConcatenateAllFiles(pathName)
String pathName // Name of symbolic path or "" to get dialog
String fileName
Variable index=0
Wave/D/Z DateTimeW, CH4_dry, CO2_dry
if (!WaveExists(DateTimeW)) // Date/time wave does not exist?
// Create the output waves because the code below concatenates
Make/O/N=0/D DateTimeW, CH4_dry, CO2_dry
SetScale d, 0, 0, "dat", DateTimeW // Mark as a date/time wave
endif
if (strlen(pathName)==0) // If no path specified, create one
NewPath/O temporaryPath // This will put up a dialog
if (V_flag != 0)
return -1 // User cancelled
endif
pathName = "temporaryPath"
endif
Variable result
do // Loop through each file in folder
fileName = IndexedFile($pathName, index, kFileNameExtension)
if (strlen(fileName) == 0) // No more files?
break // Break out of loop
endif
// Load the new data into a temporary data folder
String dfName = "TempDataForLoadAndConcatenate"
NewDataFolder/O/S $dfName
result = LoadOneFile(pathName, fileName)
if (result != 0)
String message
sprintf message, "An error occurred while loading the file \"%s\". Aborting the load.\r", fileName
Print message
DoAlert 0, message
KillDataFolder $dfName
break
endif
// Create wave references for the waves loaded into the temporary data folder
Wave DateTimeWNew = :DateTimeW
Wave CH4_dryNew = :CH4_dry
Wave CO2_dryNew = :CO2_dry
SetDataFolder :: // Back to parent data folder
Wave DateTimeW, CH4_dry, CO2_dry
Concatenate /NP {DateTimeWNew}, DateTimeW
Concatenate /NP {CH4_dryNew}, CH4_dry
Concatenate /NP {CO2_dryNew}, CO2_dry
KillDataFolder $dfName
Printf "Loaded file %d: \"%s\"\r", index, fileName
index += 1
while (1)
if (Exists("temporaryPath")) // Kill temp path if it exists
KillPath temporaryPath
endif
Wave DateTimeW, CH4_dry, CO2_dry
Sort DateTimeW, CO2_dry, CH4_dry,DateTimeW
return 0 // Signifies success.
End
// This example shows how to load all of the files in a folder and concatenate the data from each file.
// You will need to customize this for your application.
// In this example, the file contains four columns:
// Date Time CH4_dry CO2_dry
// The date and time column are combined into one date/time wave.
// After all files are loaded, the data is sorted by date/time.
// To customize this, you will need to understand Igor's data loading. For background information, execute:
// DisplayHelpTopic "Loading Waves"
// For background information on loading data programmatically, execute:
// DisplayHelpTopic "Loading Waves Using Igor Procedures"
Menu "Load Waves"
"Load One File...", LoadOneFile("", "")
"Load And Concatenate All Files in Folder...", LoadAndConcatenateAllFiles("")
End
static StrConstant kFileNameExtension = ".dat"
// LoadOneFile(pathName, fileName)
// Produces the following waves: DateTimeW, CH4_dry, CO2_dry
Function LoadOneFile(pathName, fileName)
String pathName // Name of an Igor symbolic path or "".
String fileName // Name of file or full path to file.
// First get a valid reference to a file.
if ((strlen(pathName)==0) || (strlen(fileName)==0))
// Display dialog looking for file.
Variable refNum
Open/D/R/F=kFileNameExtension/P=$pathName refNum as fileName
fileName = S_fileName // S_fileName is set by Open/D
if (strlen(fileName) == 0) // User cancelled?
return -1
endif
endif
String columnInfoStr = " "
columnInfoStr += "N='DateW,F=6;" // Load DATE column - will become date/time wave
columnInfoStr += "N='TimeW',F=7;" // Load TIME column
columnInfoStr += "N='CH4_dry';" // Load CH4_dry
columnInfoStr += "N='CO2_dry';" // Load CO2_dry
LoadWave /J /D /K=0 /A /B=columnInfoStr /Q /R={English, 1, 2, 1, 1, "Year-Month-DayofMonth", 40} /P=$pathName fileName
Variable numWavesLoaded = V_flag // V_flag is set by LoadWave
if (numWavesLoaded != 4)
Print "Error loading file - wrong number of waves loaded"
return -1
endif
Wave DateTimeW,TimeW // Create reference to waves created by LoadWave
DateTimeW += TimeW // Add time to date to obtain date/time
KillWaves/Z TimeW // This is no longer needed
return 0 // Success
End
// LoadAndConcatenateAllFiles(pathName)
// Loads all files in specified folder with extension specified by kFileNameExtension.
// The output waves are: DateTimeW, CH4_dry, CO2_dry
// All loaded waves are concatenated, creating the output waves in the current data folder.
// If the output waves already exist in the current data folder, this routine appends to them.
Function LoadAndConcatenateAllFiles(pathName)
String pathName // Name of symbolic path or "" to get dialog
String fileName
Variable index=0
Wave/D/Z DateTimeW, CH4_dry, CO2_dry
if (!WaveExists(DateTimeW)) // Date/time wave does not exist?
// Create the output waves because the code below concatenates
Make/O/N=0/D DateTimeW, CH4_dry, CO2_dry
SetScale d, 0, 0, "dat", DateTimeW // Mark as a date/time wave
endif
if (strlen(pathName)==0) // If no path specified, create one
NewPath/O temporaryPath // This will put up a dialog
if (V_flag != 0)
return -1 // User cancelled
endif
pathName = "temporaryPath"
endif
Variable result
do // Loop through each file in folder
fileName = IndexedFile($pathName, index, kFileNameExtension)
if (strlen(fileName) == 0) // No more files?
break // Break out of loop
endif
// Load the new data into a temporary data folder
String dfName = "TempDataForLoadAndConcatenate"
NewDataFolder/O/S $dfName
result = LoadOneFile(pathName, fileName)
if (result != 0)
String message
sprintf message, "An error occurred while loading the file \"%s\". Aborting the load.\r", fileName
Print message
DoAlert 0, message
KillDataFolder $dfName
break
endif
// Create wave references for the waves loaded into the temporary data folder
Wave DateTimeWNew = :DateTimeW
Wave CH4_dryNew = :CH4_dry
Wave CO2_dryNew = :CO2_dry
SetDataFolder :: // Back to parent data folder
Wave DateTimeW, CH4_dry, CO2_dry
Concatenate /NP {DateTimeWNew}, DateTimeW
Concatenate /NP {CH4_dryNew}, CH4_dry
Concatenate /NP {CO2_dryNew}, CO2_dry
KillDataFolder $dfName
Printf "Loaded file %d: \"%s\"\r", index, fileName
index += 1
while (1)
if (Exists("temporaryPath")) // Kill temp path if it exists
KillPath temporaryPath
endif
Wave DateTimeW, CH4_dry, CO2_dry
Sort DateTimeW, CO2_dry, CH4_dry,DateTimeW
return 0 // Signifies success.
End
Forum
Support
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More