Calculate the intersection (and difference) of two 1D text waves


//**
// Calculates the intersection of two 1D text waves.
//
// @param wave1
// 	First 1D text wave.
// @param wave2
// 	Second 1D text wave.
// @param resultWave
// 	A text wave where the result will be stored.  This wave will be overwritten if it already contains
// 	any data.
// @param rejectWave
// 	[OPTIONAL]  A text wave where all values that are in the shorter of wave1 and wave 2 but
//	not in the longer are stored.  Providing this parameter allows you to determine both which
//	values are present in both waves and which are not.  NOTE:  rejectWave will NOT contain
//	values that are present in the longer of the two waves but not in the shorter.
//*
Function CalculateTextWaveIntersection(wave1, wave2, resultWave, [rejectWave])
	WAVE/T wave1
	WAVE/T wave2
	WAVE/T resultWave
	WAVE/T rejectWave
	
	Variable processRejects
	if (ParamIsDefault(rejectWave))
		processRejects = 0
	else
		processRejects = 1
	endif
 
	Variable wave1Rows = DimSize(wave1, 0)
	Variable wave2Rows = DimSize(wave2, 0)
	Variable longRows, shortRows
	if (wave1Rows > wave2Rows)
		Duplicate/O/T wave1, longWave
		WAVE/T shortWave = wave2
		longRows = wave1Rows
		shortRows = wave2Rows
	else
		Duplicate/O/T wave2, longWave
		WAVE/T shortWave = wave1
		longRows = wave2Rows
		shortRows = wave1Rows
	endif
 
	// Sort values in longWave
	Sort longWave, longWave
	Redimension/N=(0) resultWave
 
	Variable n, numOutRows, longWaveRow, rejectRows
	For (n=0; n<shortRows; n+=1)
		FindValue/TEXT=shortWave[n]/TXOP=4 longWave
		longWaveRow = V_Value
		if ((longWaveRow) >= 0 && cmpstr(longWave[longWaveRow], shortWave[n]) == 0)
			Redimension/N=(numOutRows + 1) resultWave
			resultWave[numOutRows] = shortWave[n]
			numOutRows += 1
		elseif (processRejects)
			rejectRows = DimSize(rejectWave, 0)
			Redimension/N=(rejectRows + 1) rejectWave
			rejectWave[rejectRows] = shortWave[n]
		endif
	EndFor
	KillWaves/Z longWave
End

Forum

Support

Gallery

Igor Pro 10

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More