Save Complex 2D Wave As FixedField



//	SaveComplex2DWaveAsFixedField(pathName, fileName, header, cw, fieldWidth, digitsAfterDP, fullPathOut)
//	Writes a 2D complex wave to a text file using FORTRAN-style fixed field formatting.
//	To try it, execute this:
//		MakeTestData(10,5); Test()

Function SaveComplex2DWaveAsFixedField(pathName, fileName, header, cw, fieldWidth, digitsAfterDP, fullPathOut)
	String pathName		// Symbolic path name or "" for dialog
	String fileName			// Output file name or "" for dialog
	String header			// Header text to be written to file or "" if none. Should end with CRLF.
	Wave/C cw
	Variable fieldWidth
	Variable digitsAfterDP
	String &fullPathOut		// Output: Full path to saved file or "" if error or user cancels
	
	fullPathOut = ""
	
	Variable refNum = 0
	Open /P=$pathName /T=".dat" refNum as fileName
	if (GetRTError(0))
		return -1			// Error opening file
	endif
	if (refNum == 0)
		return -1			// User cancelled
	endif
	
	FStatus refNum
	fullPathOut = S_path + S_fileName
	
	fprintf refNum, "%s", header
	
	Variable numRows = DimSize(cw, 0)
	Variable numColumns = DimSize(cw, 1)
	
	Variable row, column
	
	for(row=0; row<numRows; row+=1)
		for(column=0; column<numColumns; column+=1)
			String text
			Variable/C cval = cw[row][column]
			Variable rVal = real(cval), iVal = imag(cval)
			
			fprintf refNum, "%*.*E%*.*E", fieldWidth, digitsAfterDP, rVal, fieldWidth, digitsAfterDP, iVal
		endfor
		fprintf refNum, "\r\n"
	endfor
	
	Close refNum
	
	return 0	
End

Function MakeTestData(rows,columns)
	Variable rows,columns
	Make /O /C /N=(rows,columns) mat = cmplx(gnoise(1), gnoise(1))
End

Function Test()
	DoWindow/K FixedFieldNotebook
	
	String pathName = "Igor"				// "" gives dialog
	String fileName = "FixedField.dat"
	String header = "This is a test of the SaveComplex2DWaveAsFixedField routine\r\n"
	String fullPathOut
	
	Variable timerRefNum = StartMSTimer
	
	Variable result = SaveComplex2DWaveAsFixedField(pathName, fileName, header, mat, 14, 5, fullPathOut)
	
	Variable elapsed = StopMSTimer(timerRefNum) / 1E6
	
	if (result == 0)
		Printf "Elapsed time: %g\r", elapsed
	
		OpenNotebook /P=$pathName /N=FixedFieldNotebook /K=1 fullPathOut
		Notebook FixedFieldNotebook font="Courier New"
	endif
End

Forum

Support

Gallery

Igor Pro 10

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More