| 2.2.4.9.8 DataRange::FindNextFindNext
 DescriptionFind next cell for numierc valueFind next cell for string value
 Syntaxint FindNext(Datasheet& ds, int& nCol, int& nRow, double dThresholdVal,
 uint wBitwiseOptions = WKSREPL_TEST_EQUAL, int nIndex = -1,
 double rTolerance = 1e-8, double* pdReplaceVal = NULL,
 BOOL bUndo = FALSE, int* pnMatrixObjectIndex = NULL) int FindNext(Worksheet& wks, int& nCol, int& nRow, LPCSTR lpcszOld,
 uint wBitwiseOptions = WKSREPL_TEST_STR_MATCH_WHOLE_WORD,
 int nIndex = -1, LPCSTR lpcszNew = NULL, BOOL bUndo = FALSE) Parameters ds[input]Datasheet nCol[input]Column index nRow[input]Row index dThresholdVal[input]Compared with original data wBitwiseOptions[input]Options: nIndex[input]Range index rTolerance[input]Tolerance for Equal testing pdReplaceVal[input]Used to replace original data bUndo[input]Undo controller pnMatrixObjectIndex [input]Index of matrix object
 
  wks[input]Worksheet nCol[input]Column index nRow[input]Row index lpcszOld[input]Compare with original string wBitwiseOptions[input]Replace options: nIndex[input]Range index lpcszNew[input]Used to replace original string bUndo[input]Undo controller
 Bitwise Options:
 WKSREPL_TEST_LESSTHAN = 1,WKSREPL_TEST_EQUAL = 2,WKSREPL_TEST_GREATER = 4,WKSREPL_USE_ABSOLUTE_VALUE_IN_TEST = 8,WKSREPL_KEEP_ORIGINAL_SIGN_WHEN_TEST_RESULT_IS_TRUE = 16,WKSREPL_SET_TO_MISSING_VALUE_WHEN_TEST_RESULT_IS_FALSE = 32,WKSREPL_TEST_STR_MATCH_WHOLE_WORD = 64,WKSREPL_TEST_STR_WILDCARD_MATCHING = 128,WKSREPL_TEST_STR_CASE_SENSITIVE = 256,WKSREPL_REPLACE_MATCHING_PART_ONLY = 0x00000200,WKSREPL_FIND_NEXT_SEARCH_UPWARD = 0x00000400,WKSREPL_SKIP_LINKED_CELL = 0x00000800,WKSREPL_NUMERIC_NANUM_SKIP_BLANK_TEXT = 0x08000000,WKSREPL_NUMERIC_FIND_BLANK = 0x10000000,WKSREPL_NUMERIC_REPL_BLANK = 0x20000000,WKSREPL_CHECK_FIND_LABEL_ROWS = 0x40000000,
 ReturnReturns an integer with one or more of the following bits set:
 DATARANGE_FIND_NEXT_SUCCESSFULLY_FOUND = 0x00010000
DATARANGE_FIND_NEXT_INPUT_MATCHED_CONDITIONS = 0x00020000
DATARANGE_FIND_NEXT_SUCCESSFULLY_REPLACE_INPUT = 0x00040000
DATARANGE_FIND_NEXT_INVALID_ARGUMENT = 0x00000001
 These constants are declared in OC_const.h
 ExamplesEX1
 //Find a cell in worksheet which is equal or less than 50.0 according to the datarange index.
void DataRange_FindNext_Ex1()
{
    Worksheet wks;
    wks.Create();
    if (wks)
    {
        while (wks.Columns(0))
            wks.DeleteCol(0);
 
        wks.AddCol("A");
        wks.AddCol("B");
 
        for (int j = 0; j < 2; j++)
            for (int i = 0; i < 2; i++)
                wks.SetCell(i, j, rnd() * 100);
 
        DataRange dr;
        dr.Add("Range1", wks, 0, 0, -1, 0); // from row,col, to row,col
        dr.Add("Range2", wks, 0, 1, -1, 1); // from row,col, to row,col
 
        int nCol, nRow;
        uint nOptions = WKSREPL_TEST_LESSTHAN|WKSREPL_TEST_EQUAL;
        int nRangeIndex = 1;//Find in the Range1.
        
        int nRet = dr.FindNext(wks, nCol, nRow, 50.0, nOptions, nRangeIndex);
        printf("FindNext returned %d\n", nRet);
        printf("nCol == %d, nRow == %d\n", nCol, nRow);
    }
}EX2
 //Find a cell in worksheet which is whole match the string "Abc" with case-sensitive according to the datarange index.
void DataRange_FindNext_Ex2()
{
	Worksheet wks;
	wks.Create();
	if(wks)
	{
		wks.SetCell(0,0,"ab");
		wks.SetCell(1,0,"Ab");
		wks.SetCell(2,0,"abc");
		wks.SetCell(3,0,"Abc");
		
		DataRange dr;
		dr.Add(wks,0,"Range");
	
		
		int nCol, nRow;
		uint nOptions =WKSREPL_TEST_STR_CASE_SENSITIVE;//Match the string with case-sensitive.
		
		int nRangeIndex = 0;
        
        int nRet = dr.FindNext(wks, nCol, nRow, "Abc", nOptions, nRangeIndex);
        printf("FindNext returned %d\n", nRet);
        printf("nCol == %d, nRow == %d\n", nCol, nRow);
	}
}EX3
 //wildchar search column for string and dump the row index
void col_find_rows(int nCol, string StrToFind)
{	
	Worksheet wks = Project.ActiveLayer();
	nCol--;//OC index from 0, LT from 1
	if(nCol < 0 || nCol > wks.GetNumCols()-1)
	{
		out_int("invalid col index: ", nCol+1);
		return;
	}
	char    szBookSName[100];
	LT_get_str("%H", szBookSName, 100);//active book from %H
	string strBookRange;
	strBookRange.Format("[%s]",szBookSName);
	DataRange dr;//need a Book datarange to search a sheet at specified column
	dr.Create(strBookRange);
	int nRow = DATARANGE_FIND_REPLACE_INVALID_ROW_INDEX;
	int ii = 1;
	while(true)
	{		
		int nRet = dr.FindNext(wks, nCol, nRow, StrToFind, WKSREPL_TEST_STR_WILDCARD_MATCHING);
		if(!( nRet & DATARANGE_FIND_NEXT_SUCCESSFULLY_FOUND))
			break;//not found
		
		printf("%d: found at col %d row %d\n", ii++, nCol+1, nRow+1);
		if(ii > 10) // testing code, don't show too many
			break;
	}
}
void DataRange_FindNext_Ex3()
{
	Worksheet wks;
	wks.Create("origin");
	vector<string> vs1 = {"ABCD", "d", "abcd", "f", "qqabc", "ab"};
	vector<string> vs2 = {"q", "qqabc", "e", "r", "t", "abcd"};
	wks.Columns(0).PutStringArray(vs1);
	wks.Columns(1).PutStringArray(vs2);
	col_find_rows(2, "*abc*");
}RemarkSee AlsoHeader to Includeorigin.h
 |