![](/profiles/wavemetrics/themes/wavemetrics/logo.png)
Load Matlab 1D Numeric Text File
![](/sites/default/files/styles/thumbnail/public/default_images/Artboard%201_1.png?itok=jeHOCIXy)
![](/profiles/wavemetrics/themes/wavemetrics/images/icons/employee-icon.png)
hrodstein
Menu "Load Waves" "Load Matlab 1D Numeric Text File...", LoadMatlab1DNumericTextFile("", "") End // LoadMatlab1DNumericTextFile(pathName, fileName) // // Loads a .m file containing one or more lines of numeric text data in this format: // <name> = [number<space>number<space>...] // // Data can be exported in this format from Matlab using this Matlab command: // save my_data.out <array1> -ASCII // save my_data.out <array2> -ASCII -append // // Each line is loaded into a separate 1D wave which is named based on <name>. // // pathName is an Igor symbolic path. // If either pathName or fileName is "", an Open File dialog is presented. // // The function returns a semicolon-separated string containing the names // of the loaded waves. // // NOTE: Any pre-existing waves with the same names are overwritten. // // NOTE: This works for 1D NUMERIC data only. Function/S CreateWaveFromMFileLine(text) String text Variable startPos, endPos // Find name startPos = 0 endPos = strsearch(text, " ", startPos) // Look for first space if (endPos < 0) Print "CreateWaveFromMFileLine unable to find wave name" return "" // Error endif String name = text[startPos,endPos-1] name = CleanupName(name, 0) // Make sure it is a legal Igor name startPos = strsearch(text, "[", endPos) // Look for left bracket if (endPos < 0) Printf "CreateWaveFromMFileLine unable to find left bracket for wave %s\r", name return "" // Error endif // Replace spaces with CRLF and write the resulting text to a file so it can be loaded by LoadWave String tempFilePath = SpecialDirPath("Temporary", 0, 0, 0) + "TempLoadMatlab1DNumericTextFile.txt" String tempData = ReplaceString(" ", text, "\r\n") Variable tempRefNum Open tempRefNum as tempFilePath FBinWrite tempRefNum, tempData Close tempRefNum // Now load the data as general text String columnInfoStr = "N=" + name + ";" // e.g., N=wave0; LoadWave /O /D /G /A /B=columnInfoStr /Q tempFilePath DeleteFile /Z tempFilePath return name End Function/S LoadMatlab1DNumericTextFile(pathName, fileName) String pathName // Name of Igor symbolic path or "" for dialog String fileName // Name of file Variable numLines = 0 Variable refNum String fileFilters = "M Files (*.m):.m;" fileFilters += "All Files:.*;" Open/R/P=$pathName/F=fileFilters refNum as fileName if (strlen(S_fileName) == 0) return "" // User cancelled endif String nameList = "" do String text FReadLine refNum, text if (strlen(text) == 0) break endif String name = CreateWaveFromMFileLine(text) if (strlen(name) == 0) Printf "LoadMatlab1DNumericTextFile unable to load wave from line %d\r", numLines else nameList += name + ";" endif numLines += 1 while(1) Close refNum return nameList End
![](/sites/default/files/forum.png)
Forum
![](/sites/default/files/support.png)
Support
![](/sites/default/files/gallery.png)
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More
The first problem I am having is with the Matlab load XOP. I already found out that there is a problem with this. I tried as suggested to change the extension to "anything else", but that did not help.
As for the code that Howard posted here, it does not appear that this would work for 32 channels of EEG data. But perhaps I'm wrong.
Could anyone please provide guidance on how to proceed?
thanks
Chuck Larson
April 23, 2012 at 09:19 am - Permalink