Loading an entire folder of csvs

Hi. I have a year's worth of data to load from an instrument. There are hundreds of csv files and I'd rather not load them one by one. I have another ipf that does this for a different instrument and altered the code to make it compatible with this other data series.

The csv data looks like:

Device Info
Serial Number 9310-01 93101011006
Record Type Differential
Unit Type Counts
Volume Type m3
Temperature Type ∞C

Minimum Average Maximum Std. Dev. Std. Err.
Channel 1 233943 246551.11 256851 5983.59 1410.35
Channel 2 162532 167664.5 170236 1991.57 469.42
Channel 3 112368 120411.83 124389 2941.69 693.36
Channel 4 3175 4390.89 4982 455.34 107.33
Channel 5 161 269.06 358 46.63 10.99
Channel 6 0 2.06 7 1.89 0.45

Record # Location Date & Time Instrument Status Sample Time Laser Status Ch1 Size (um) Ch1 Differential Ch1 Alarm
1 Unknown 2/14/14 14:54 (ok) 0:01:00 (ok) 0.3 241881
2 Unknown 2/14/14 14:55 (ok) 0:01:00 (ok) 0.3 244010
3 Unknown 2/14/14 14:56 (ok) 0:01:00 (ok) 0.3 244577
4 Unknown 2/14/14 14:57 (ok) 0:01:00 (ok) 0.3 237892
5 Unknown 2/14/14 14:58 (ok) 0:01:00 (ok) 0.3 233943
6 Unknown 2/14/14 14:59 (ok) 0:01:00 (ok) 0.3 248205
7 Unknown 2/14/14 15:00 (ok) 0:01:00 (ok) 0.3 243650
8 Unknown 2/14/14 15:01 (ok) 0:01:00 (ok) 0.3 246622
9 Unknown 2/14/14 15:02 (ok) 0:01:00 (ok) 0.3 255866
10 Unknown 2/14/14 15:03 (ok) 0:01:00 (ok) 0.3 256851
11 Unknown 2/14/14 15:04 (ok) 0:01:00 (ok) 0.3 252314
12 Unknown 2/14/14 15:05 (ok) 0:01:00 (ok) 0.3 246870
13 Unknown 2/14/14 15:06 (ok) 0:01:00 (ok) 0.3 240077
14 Unknown 2/14/14 15:07 (ok) 0:01:00 (ok) 0.3 245555
15 Unknown 2/14/14 15:08 (ok) 0:01:00 (ok) 0.3 247434
16 Unknown 2/14/14 15:09 (ok) 0:01:00 (ok) 0.3 252234
17 Unknown 2/14/14 15:10 (ok) 0:01:00 (ok) 0.3 251683
18 Unknown 2/14/14 15:11 (ok) 0:01:00 (ok) 0.3 248256

There are a total of 28 columns (I omitted for space) and I want to start at row 16 for the actual data.

The old code is

#pragma rtGlobals=3     // Use modern global access method and strict wave access.

Menu "Aethalometer"
    //"Load 1st Aethalometer File...", LoadAethalometerFile("", "", 1)
    "Load Warehouse Aethalometer Files...", LoadWareFiles("")
    "Load Golf Course Aethalometer Files...", LoadGolfFiles("")

End
 
// LoadAethalometerFile(pathName, fileName, makeTable)
// Returns a semicolon-separated list of waves loaded or "" if cancel.
Function LoadWareAethalometerFile(pathName, fileName, makeTable)
    String pathName     // Name of an Igor symbolic path or "".
    String fileName         // Name of file or full path to file.
    Variable makeTable      // 1 to make table, 0 to not make table
 
    // 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="*.csv"/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
 
    // Now load the data. The /V flag specifies the accepted delimiters in the data file.
    // Add the /A flag if you don't want the "Loading Delimited Text" dialog.
    // Add the /O flag if you want to overwrite existing waves with the same names.
 
    // "Date" and "Time" are not available as wave names because they are Igor function names
    String columnInfoStr = "N=Ware_timewave;N=Ware_vTime;N=Ware_BC_ng_m3;N=Ware_UV_ng_m3;N=Ware_LPM;N=Ware_SBZ_IR;N=Ware_SBO_IR;N=Ware_RBZ_IR;N=Ware_RBO_IR;N=Ware_Bypass_Fraction_IR;N=Ware_Attenuation_IR;N=Ware_SBZ_UV;N=Ware_SBO_UV;N=Ware_RBZ_UV;N=Ware_RBO_UV;N=Ware_Bypass_Fraction_UV;N=Ware_Attenuation_UV;"
    String delimiters = ","                     // Comma-delimited
    String skipChars = "\" "                        // Skip quotes around date and time and spaces before commas
    LoadWave /J /D/A /K=0 /V={delimiters,skipChars,0,0} /B=columnInfoStr /R={English, 1, 3, 2, 1, "DayOfMonth-Month-Year", 40} /P=$pathName fileName
    Variable numWavesLoaded = V_flag            // V_flag is set by LoadWave
    if (numWavesLoaded != 17)
        Print "Error loading file - wrong number of waves loaded"
        return -1
    endif
 
    // Create reference to waves created by LoadWave
    Wave Ware_timewave,Ware_vTime
 
    Ware_timewave += Ware_vTime             // Add time to date to obtain date/time
    KillWaves/Z Ware_vTime              // This is no longer needed
    return 0                            // Success
End
 
Function ConcatenateWareAethalometerFile(pathName, fileName)
    String pathName
    String fileName
 
    // Create a new data folder
    NewDataFolder/O/S WareAethalometerTemp
 
    Variable result = LoadWareAethalometerFile(pathName, fileName, 0)
 
    SetDataFolder ::        // Back to original data folder
 
    if (result != 0)
        return result   // Error loading new waves
    endif
 
    // Concatenate new waves onto old
    Concatenate/NP {:WareAethalometerTemp:Ware_timewave}, Ware_timewave
    Concatenate/NP {:WareAethalometerTemp:Ware_BC_ng_m3}, Ware_BC_ng_m3
    Concatenate/NP {:WareAethalometerTemp:Ware_UV_ng_m3}, Ware_UV_ng_m3
    Concatenate/NP {:WareAethalometerTemp:Ware_LPM}, Ware_LPM
    Concatenate/NP {:WareAethalometerTemp:Ware_SBZ_IR}, Ware_SBZ_IR
    Concatenate/NP {:WareAethalometerTemp:Ware_SBO_IR}, Ware_SBO_IR
    Concatenate/NP {:WareAethalometerTemp:Ware_RBZ_IR}, Ware_RBZ_IR
    Concatenate/NP {:WareAethalometerTemp:Ware_RBO_IR}, Ware_RBO_IR
    Concatenate/NP {:WareAethalometerTemp:Ware_Bypass_Fraction_IR}, Ware_Bypass_Fraction_IR
    Concatenate/NP {:WareAethalometerTemp:Ware_Attenuation_IR}, Ware_Attenuation_IR
    Concatenate/NP {:WareAethalometerTemp:Ware_SBZ_UV}, Ware_SBZ_UV
    Concatenate/NP {:WareAethalometerTemp:Ware_SBO_UV}, Ware_SBO_UV
    Concatenate/NP {:WareAethalometerTemp:Ware_RBZ_UV}, Ware_RBZ_UV
    Concatenate/NP {:WareAethalometerTemp:Ware_RBO_UV}, Ware_RBO_UV
    Concatenate/NP {:WareAethalometerTemp:Ware_Bypass_Fraction_UV}, Ware_Bypass_Fraction_UV
    Concatenate/NP {:WareAethalometerTemp:Ware_Attenuation_UV}, Ware_Attenuation_UV

   
    // Kill temp data folder
    KillDataFolder/Z :WareAethalometerTemp
 
    return 0            // Success
End


Function LoadWareFiles(pathName)
    String pathName         // Name of symbolic path or "" to get dialog
    String fileName
    Variable index=0

    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, ".csv")
        if (strlen(fileName) == 0)          // No more files?
            break                                   // Break out of loop
        endif
        result = ConcatenateWareAethalometerFile(pathName, fileName)
        if (result == 0)                            // Did LoadAndGraph succeed?
                                                    // Print the graph.
            fileName = WinName(0, 1)                // Get the name of the top graph
            //String cmd
            //sprintf cmd, "PrintGraphs %s", fileName
            //Execute cmd                       // Explained below.

            //DoWindow/K $fileName          // Kill the graph
            //KillWaves/A/Z                 // Kill all unused waves
        endif
        index += 1
    while (1)

    if (Exists("temporaryPath"))            // Kill temp path if it exists
        KillPath temporaryPath
    endif
       
        Wave Ware_timewave,Ware_vTime,Ware_BC_ng_m3,Ware_UV_ng_m3,Ware_LPM,Ware_SBZ_IR,Ware_SBO_IR,Ware_RBZ_IR,Ware_RBO_IR,Ware_Bypass_Fraction_IR,Ware_Attenuation_IR,Ware_SBZ_UV,Ware_SBO_UV,Ware_RBZ_UV,Ware_RBO_UV,Ware_Bypass_Fraction_UV,Ware_Attenuation_UV
        Edit Ware_timewave,Ware_BC_ng_m3,Ware_UV_ng_m3,Ware_LPM,Ware_SBZ_IR,Ware_SBO_IR,Ware_RBZ_IR,Ware_RBO_IR,Ware_Bypass_Fraction_IR,Ware_Attenuation_IR,Ware_SBZ_UV,Ware_SBO_UV,Ware_RBZ_UV,Ware_RBO_UV,Ware_Bypass_Fraction_UV,Ware_Attenuation_UV
        ModifyTable format(Ware_timewave)=8, width(Ware_timewave)=150
        Sort Ware_timewave Ware_BC_ng_m3,Ware_UV_ng_m3,Ware_LPM,Ware_SBZ_IR,Ware_SBO_IR;DelayUpdate
        Sort Ware_timewave Ware_RBZ_IR,Ware_RBO_IR,Ware_Bypass_Fraction_IR;DelayUpdate
        Sort Ware_timewave Ware_Attenuation_IR,Ware_SBZ_UV,Ware_SBO_UV,Ware_RBZ_UV;DelayUpdate
        Sort Ware_timewave Ware_RBO_UV,Ware_Bypass_Fraction_UV,Ware_Attenuation_UV;DelayUpdate
        Sort Ware_timewave Ware_timewave
        DoWindow/K WareAethalometer
        DoWindow/C/T WareAethalometer,"Warehouse Aethalometer Data"

    return 0                        // Signifies success.
End


End


I've altered it as:

#pragma rtGlobals=3     // Use modern global access method and strict wave access.

Menu "Aerotrak"
    "Load Warehouse Aerotrak Files...", LoadWareFiles("")
End
 
// LoadAerotrakFile(pathName, fileName, makeTable)
// Returns a semicolon-separated list of waves loaded or "" if cancel.
Function LoadWareAerotrakFile(pathName, fileName, makeTable)
    String pathName     // Name of an Igor symbolic path or "".
    String fileName         // Name of file or full path to file.
    Variable makeTable      // 1 to make table, 0 to not make table
 
    // 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="*.csv"/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
 
    // Now load the data. The /V flag specifies the accepted delimiters in the data file.
    // Add the /A flag if you don't want the "Loading Delimited Text" dialog.
    // Add the /O flag if you want to overwrite existing waves with the same names.
 
    // "Date" and "Time" are not available as wave names because they are Igor function names
    String columnInfoStr = "N=Record;N=Location;N=DateW;N=Instrument_Status;N=Sample_Time;N=Laser_Status;N=Ch1_Size_um;N=Ch1_Differential;N=Ch1_Alarm;N=Ch2_Size_um;N=Ch2_Differential;N=Ch2_Alarm;N=Ch3_Size_um;N=Ch3_Differential;N=Ch3_Alarm;N=Ch4_Size_um;N=Ch4_Differential;N=Ch4_Alarm;N=Ch5_Size_um;N=Ch5_Differential;N=Ch5_Alarm;N=Ch6_Size_um;N=Ch6_Differential;N=Ch6_Alarm;N=Flow_Status;N=Volume_m3;N=Temperature;N=Humidity"
    String delimiters = "\t"                        //Tab-delimited
    String skipChars = "\" "                        // Skip quotes around date and time and spaces before commas
    LoadWave /J /D/A /K=0 /V={delimiters,skipChars,0,0} /B=columnInfoStr /R={English, 1, 3, 2, 1, "DayOfMonth-Month-Year", 40} /L={0,16,0,0,0}/P=$pathName fileName
    Variable numWavesLoaded = V_flag            // V_flag is set by LoadWave
    if (numWavesLoaded != 28)
        Print "Error loading file - wrong number of waves loaded"
        return -1
    endif
 
    // Create reference to waves created by LoadWave
    //Wave Ware_timewave,Ware_vTime
 
    //Ware_timewave += Ware_vTime               // Add time to date to obtain date/time
    //KillWaves/Z Ware_vTime                // This is no longer needed
    return 0                            // Success
End
 
Function ConcatenateWareAerotrakFile(pathName, fileName)
    String pathName
    String fileName
 
    // Create a new data folder
    NewDataFolder/O/S WareAerotrakTemp
 
    Variable result = LoadWareAerotrakFile(pathName, fileName, 0)
 
    SetDataFolder ::        // Back to original data folder
 
    if (result != 0)
        return result   // Error loading new waves
    endif
 
    // Concatenate new waves onto old
    Concatenate/NP {:WareAerotrakTemp:Record}, Record
    Concatenate/NP {:WareAerotrakTemp:Location}, Location
    Concatenate/NP {:WareAerotrakTemp:DateW}, DateW
    Concatenate/NP {:WareAerotrakTemp:Instrument_Status}, Instrument_Status
    Concatenate/NP {:WareAerotrakTemp:Sample_Time}, Sample_Time
    Concatenate/NP {:WareAerotrakTemp:Laser_Status}, Laser_Status
    Concatenate/NP {:WareAerotrakTemp:Ch1_Size_um}, Ch1_Size_um
    Concatenate/NP {:WareAerotrakTemp:Ch1_Differential}, Ch1_Differential
    Concatenate/NP {:WareAerotrakTemp:Ch1_Alarm}, Ch1_Alarm
    Concatenate/NP {:WareAerotrakTemp:Ch2_Size_um}, Ch2_Size_um
    Concatenate/NP {:WareAerotrakTemp:Ch2_Differential}, Ch2_Differential
    Concatenate/NP {:WareAerotrakTemp:Ch2_Alarm}, Ch2_Alarm
    Concatenate/NP {:WareAerotrakTemp:Ch3_Size_um}, Ch3_Size_um
    Concatenate/NP {:WareAerotrakTemp:Ch3_Differential}, Ch3_Differential
    Concatenate/NP {:WareAerotrakTemp:Ch3_Alarm}, Ch3_Alarm
    Concatenate/NP {:WareAerotrakTemp:Ch4_Size_um}, Ch4_Size_um
    Concatenate/NP {:WareAerotrakTemp:Ch4_Differential}, Ch4_Differential
    Concatenate/NP {:WareAerotrakTemp:Ch4_Alarm}, Ch4_Alarm
    Concatenate/NP {:WareAerotrakTemp:Ch5_Size_um}, Ch5_Size_um
    Concatenate/NP {:WareAerotrakTemp:Ch5_Differential}, Ch5_Differential
    Concatenate/NP {:WareAerotrakTemp:Ch5_Alarm}, Ch5_Alarm
    Concatenate/NP {:WareAerotrakTemp:Ch6_Size_um}, Ch6_Size_um
    Concatenate/NP {:WareAerotrakTemp:Ch6_Differential}, Ch6_Differential
    Concatenate/NP {:WareAerotrakTemp:Ch6_Alarm}, Ch6_Alarm
    Concatenate/NP {:WareAerotrakTemp:Flow_Status}, Flow_Status
    Concatenate/NP {:WareAerotrakTemp:Volume_m3}, Volume_m3
    Concatenate/NP {:WareAerotrakTemp:Temperature}, Temperature
    Concatenate/NP {:WareAerotrakTemp:Humidity}, Humidity

   
    // Kill temp data folder
    KillDataFolder/Z :WareAerotrakTemp
 
    return 0            // Success
End


Function LoadWareFiles(pathName)
    String pathName         // Name of symbolic path or "" to get dialog
    String fileName
    Variable index=0

    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, ".csv")
        if (strlen(fileName) == 0)          // No more files?
            break                                   // Break out of loop
        endif
        result = ConcatenateWareAerotrakFile(pathName, fileName)
        if (result == 0)                            // Did LoadAndGraph succeed?
                                                    // Print the graph.
            fileName = WinName(0, 1)                // Get the name of the top graph
            //String cmd
            //sprintf cmd, "PrintGraphs %s", fileName
            //Execute cmd                       // Explained below.

            //DoWindow/K $fileName          // Kill the graph
            //KillWaves/A/Z                 // Kill all unused waves
        endif
        index += 1
    while (1)

    if (Exists("temporaryPath"))            // Kill temp path if it exists
        KillPath temporaryPath
    endif
       
        Wave DateW,Instrument_Status,Sample_Time,Laser_Status,Ch1_Size_um,Ch1_Differential,Ch1_Alarm,Ch2_Size_um,Ch2_Differential,Ch2_Alarm,Ch3_Size_um,Ch3_Differential,Ch3_Alarm,Ch4_Size_um,Ch4_Differential,Ch4_Alarm,Ch5_Size_um,Ch5_Differential,Ch5_Alarm,Ch6_Size_um,Ch6_Differential,Ch6_Alarm,Flow_Status,Volume_m3
        Edit DateW,Instrument_Status,Sample_Time,Laser_Status,Ch1_Size_um,Ch1_Differential,Ch1_Alarm,Ch2_Size_um,Ch2_Differential,Ch2_Alarm,Ch3_Size_um,Ch3_Differential,Ch3_Alarm,Ch4_Size_um,Ch4_Differential,Ch4_Alarm,Ch5_Size_um,Ch5_Differential,Ch5_Alarm,Ch6_Size_um,Ch6_Differential,Ch6_Alarm,Flow_Status,Volume_m3
        ModifyTable format(DateW)=8, width(DateW)=150
        Sort DateW DateW,Instrument_Status,Sample_Time,Laser_Status,Ch1_Size_um;DelayUpdate
        Sort DateW Ch1_Differential,Ch1_Alarm,Ch2_Size_um,Ch2_Differential,Ch2_Alarm;DelayUpdate
        Sort DateW Ch3_Size_um,Ch3_Differential,Ch3_Alarm,Ch4_Size_um;DelayUpdate
        Sort DateW Ch4_Differential,Ch4_Alarm,Ch5_Size_um,Ch5_Differential,Ch5_Alarm;DelayUpdate
        Sort DateW Ch6_Size_um,Ch6_Differential,Ch6_Alarm,Flow_Status,Volume_m3
        DoWindow/K WareAerotrak
        DoWindow/C/T WareAerotrak,"Warehouse Aerotrak Data"

    return 0                        // Signifies success.
End


I believe the loadwave command is at fault, but I am getting an error. I want the files to load starting at line 16 and name the waves as specified. I really only added /L{0,16,0,0} to the loadwave command, but I'm getting an error and it only loads "record" and "location" as individual waves. Any ideas or easier solutions? Thanks
Quote:
but I am getting an error

Exactly what is the error?

Also, if you posted a couple of sample files, zipped, that will make it possible for someone to investigate.
The error is:
Delimited text load from "20130923_162617 9310-01 93101011006.csv"
Data length: 188, waves: Record_Location
Error loading file - wrong number of waves loaded

I've attached a couple of the files. The files are .csv.
SampleData.zip (8.53 KB)
Update: I changed the delimiters to ","
Now error reads:
Delimited text load from "20140513_142452 9310-01 93101011006.csv"
LoadWave/B error while parsing T= flag for column 27
Error loading file - wrong number of waves loaded
Think I figured it out. Needed a semicolon at the end of the column info string and needed to remove /R argument from the loadwave. This seems to work now

#pragma rtGlobals=3     // Use modern global access method and strict wave access.

Menu "Aerotrak"
    "Load Warehouse Aerotrak Files...", LoadWareFiles("")
End
 
// LoadAerotrakFile(pathName, fileName, makeTable)
// Returns a semicolon-separated list of waves loaded or "" if cancel.
Function LoadWareAerotrakFile(pathName, fileName, makeTable)
    String pathName     // Name of an Igor symbolic path or "".
    String fileName         // Name of file or full path to file.
    Variable makeTable      // 1 to make table, 0 to not make table
 
    // 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="*.csv"/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
 
    // Now load the data. The /V flag specifies the accepted delimiters in the data file.
    // Add the /A flag if you don't want the "Loading Delimited Text" dialog.
    // Add the /O flag if you want to overwrite existing waves with the same names.
 
    // "Date" and "Time" are not available as wave names because they are Igor function names
    String columnInfoStr = "N=Record;N=Location;N=DateW;N=Instrument_Status;N=Sample_Time;N=Laser_Status;N=Ch1_Size_um;N=Ch1_Differential;N=Ch1_Alarm;N=Ch2_Size_um;N=Ch2_Differential;N=Ch2_Alarm;N=Ch3_Size_um;N=Ch3_Differential;N=Ch3_Alarm;N=Ch4_Size_um;N=Ch4_Differential;N=Ch4_Alarm;N=Ch5_Size_um;N=Ch5_Differential;N=Ch5_Alarm;N=Ch6_Size_um;N=Ch6_Differential;N=Ch6_Alarm;N=Flow_Status;N=Volume_m3;N=AbsTemp;N=Humidity;"
    String delimiters = ","                     //Tab-delimited
    String skipChars = "\" "                        // Skip quotes around date and time and spaces before commas
    LoadWave /J /D/A /K=0 /V={delimiters,skipChars,0,0} /B=columnInfoStr /L={0,16,0,0,0}/P=$pathName fileName
    Variable numWavesLoaded = V_flag            // V_flag is set by LoadWave
    if (numWavesLoaded != 28)
        Print "Error loading file - wrong number of waves loaded"
        return -1
    endif
 
    // Create reference to waves created by LoadWave
    //Wave Ware_timewave,Ware_vTime
 
    //Ware_timewave += Ware_vTime               // Add time to date to obtain date/time
    //KillWaves/Z Ware_vTime                // This is no longer needed
    return 0                            // Success
End
 
Function ConcatenateWareAerotrakFile(pathName, fileName)
    String pathName
    String fileName
 
    // Create a new data folder
    NewDataFolder/O/S WareAerotrakTemp
 
    Variable result = LoadWareAerotrakFile(pathName, fileName, 0)
 
    SetDataFolder ::        // Back to original data folder
 
    if (result != 0)
        return result   // Error loading new waves
    endif
 
    // Concatenate new waves onto old
    Concatenate/NP {:WareAerotrakTemp:Record}, Record
    Concatenate/NP {:WareAerotrakTemp:Location}, Location
    Concatenate/NP {:WareAerotrakTemp:DateW}, DateW
    Concatenate/NP {:WareAerotrakTemp:Instrument_Status}, Instrument_Status
    Concatenate/NP {:WareAerotrakTemp:Sample_Time}, Sample_Time
    Concatenate/NP {:WareAerotrakTemp:Laser_Status}, Laser_Status
    Concatenate/NP {:WareAerotrakTemp:Ch1_Size_um}, Ch1_Size_um
    Concatenate/NP {:WareAerotrakTemp:Ch1_Differential}, Ch1_Differential
    Concatenate/NP {:WareAerotrakTemp:Ch1_Alarm}, Ch1_Alarm
    Concatenate/NP {:WareAerotrakTemp:Ch2_Size_um}, Ch2_Size_um
    Concatenate/NP {:WareAerotrakTemp:Ch2_Differential}, Ch2_Differential
    Concatenate/NP {:WareAerotrakTemp:Ch2_Alarm}, Ch2_Alarm
    Concatenate/NP {:WareAerotrakTemp:Ch3_Size_um}, Ch3_Size_um
    Concatenate/NP {:WareAerotrakTemp:Ch3_Differential}, Ch3_Differential
    Concatenate/NP {:WareAerotrakTemp:Ch3_Alarm}, Ch3_Alarm
    Concatenate/NP {:WareAerotrakTemp:Ch4_Size_um}, Ch4_Size_um
    Concatenate/NP {:WareAerotrakTemp:Ch4_Differential}, Ch4_Differential
    Concatenate/NP {:WareAerotrakTemp:Ch4_Alarm}, Ch4_Alarm
    Concatenate/NP {:WareAerotrakTemp:Ch5_Size_um}, Ch5_Size_um
    Concatenate/NP {:WareAerotrakTemp:Ch5_Differential}, Ch5_Differential
    Concatenate/NP {:WareAerotrakTemp:Ch5_Alarm}, Ch5_Alarm
    Concatenate/NP {:WareAerotrakTemp:Ch6_Size_um}, Ch6_Size_um
    Concatenate/NP {:WareAerotrakTemp:Ch6_Differential}, Ch6_Differential
    Concatenate/NP {:WareAerotrakTemp:Ch6_Alarm}, Ch6_Alarm
    Concatenate/NP {:WareAerotrakTemp:Flow_Status}, Flow_Status
    Concatenate/NP {:WareAerotrakTemp:Volume_m3}, Volume_m3
    Concatenate/NP {:WareAerotrakTemp:AbsTemp}, AbsTemp
    Concatenate/NP {:WareAerotrakTemp:Humidity}, Humidity

   
    // Kill temp data folder
    KillDataFolder/Z :WareAerotrakTemp
 
    return 0            // Success
End


Function LoadWareFiles(pathName)
    String pathName         // Name of symbolic path or "" to get dialog
    String fileName
    Variable index=0

    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, ".csv")
        if (strlen(fileName) == 0)          // No more files?
            break                                   // Break out of loop
        endif
        result = ConcatenateWareAerotrakFile(pathName, fileName)
        if (result == 0)                            // Did LoadAndGraph succeed?
                                                    // Print the graph.
            fileName = WinName(0, 1)                // Get the name of the top graph
            //String cmd
            //sprintf cmd, "PrintGraphs %s", fileName
            //Execute cmd                       // Explained below.

            //DoWindow/K $fileName          // Kill the graph
            //KillWaves/A/Z                 // Kill all unused waves
        endif
        index += 1
    while (1)

    if (Exists("temporaryPath"))            // Kill temp path if it exists
        KillPath temporaryPath
    endif
       
        Wave DateW,Instrument_Status,Sample_Time,Laser_Status,Ch1_Size_um,Ch1_Differential,Ch1_Alarm,Ch2_Size_um,Ch2_Differential,Ch2_Alarm,Ch3_Size_um,Ch3_Differential,Ch3_Alarm,Ch4_Size_um,Ch4_Differential,Ch4_Alarm,Ch5_Size_um,Ch5_Differential,Ch5_Alarm,Ch6_Size_um,Ch6_Differential,Ch6_Alarm,Flow_Status,Volume_m3
        Edit DateW,Instrument_Status,Sample_Time,Laser_Status,Ch1_Size_um,Ch1_Differential,Ch1_Alarm,Ch2_Size_um,Ch2_Differential,Ch2_Alarm,Ch3_Size_um,Ch3_Differential,Ch3_Alarm,Ch4_Size_um,Ch4_Differential,Ch4_Alarm,Ch5_Size_um,Ch5_Differential,Ch5_Alarm,Ch6_Size_um,Ch6_Differential,Ch6_Alarm,Flow_Status,Volume_m3
        ModifyTable format(DateW)=8, width(DateW)=150
        Sort DateW DateW,Instrument_Status,Sample_Time,Laser_Status,Ch1_Size_um;DelayUpdate
        Sort DateW Ch1_Differential,Ch1_Alarm,Ch2_Size_um,Ch2_Differential,Ch2_Alarm;DelayUpdate
        Sort DateW Ch3_Size_um,Ch3_Differential,Ch3_Alarm,Ch4_Size_um;DelayUpdate
        Sort DateW Ch4_Differential,Ch4_Alarm,Ch5_Size_um,Ch5_Differential,Ch5_Alarm;DelayUpdate
        Sort DateW Ch6_Size_um,Ch6_Differential,Ch6_Alarm,Flow_Status,Volume_m3
        DoWindow/K WareAerotrak
        DoWindow/C/T WareAerotrak,"Warehouse Aerotrak Data"

    return 0                        // Signifies success.
End
You need to add a semicolon to the string columnInfoStr in LoadWareAerotrakFile.