
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

Forum

Support

Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More