cancel
Showing results for 
Search instead for 
Did you mean: 

Crystal report function is failing when I add a simple line of code with nested IF

hector_ventura11
Explorer

PLEASE HELP...

This function tries to extract certain lines from a CLOB/Memo field. When I uncomment whatever of the commented lines below, it fails to compilation expecting an "ELSE".. What is wrong;

whileprintingrecords;
Local StringVar Array saLines ;
Local StringVar Array saOLines ;
Local NumberVar nLines ;
Local NumberVar i ;
Local NumberVar x ;

saLines := Split({CustomerStatus.NOTES},chr(10)) ;
saOLines := '' ;

nLines := Count (saLines);
i := 1 ;


do (
    if (instr(saLines[i], 'status', 1) > 0 and i < nLines)
    then (
            x := i ;
            do (
                 saOLines := saOLines + ToText(i) + ' ' + saLines[i] + chr(10) ;
                 i := i + 1 
               ) while ((i <= nLines) and (trim(saLines[i]) <> '') and (Uppercase(trim(saLines[i])) <> 'STATUS')) ;

//          saOLines := iif(x < i, (saOLines + chr(10)), saOLines) ;
//            if (x < i) then saOLines := saOLines + chr(10) ;
     ) ;

    i := (i + 1); 

) while (i <= nLines) ;

saOLines := saOLines + ToText(i)+ ' '+ToText(nLines) ;


join(saOLines)<br>
hector_ventura11
Explorer
0 Kudos

Finally I made my function worked, eliminating any nested if. They really don't work together which is very bad if we need a bigger or complex function

whileprintingrecords;
Local StringVar Array saLines ;
Local StringVar Array saOLines ;
Local NumberVar nLines ;
Local NumberVar i ;
Local NumberVar x ;

//saLines := split({CustomerStatus.WONOTE},chr(13)+chr(10))[1] ;
saLines := Split({CustomerStatus.NOTES},chr(10)) ;
//saOLines := '' ;

nLines := Count (saLines);
i := 0 ;


do (
i := i + 1 ;
x := 0 ;
if ((instr(saLines[i], 'status', 1) > 0) and (i < nLines))
then (
saOLines := saOLines + saLines[i] + chr(10) ;
while ((i < nLines) and (trim(saLines[i]) <> '')) do (
x := 1 ;
i := i + 1 ;
saOLines := iif(UpperCase(trim(saLines[i])) <> 'STATUS' and trim(saLines[i])<>'', saOLines + saLines[i] + chr(10), saOLines) ;
) ;
);
saOLines := iif(x = 1 and i < nLines, saOLines + chr(10), saOlines) ;
) while (i < nLines) ;

join(saOLines)


Accepted Solutions (0)

Answers (1)

Answers (1)

ido_millet
Active Contributor

Editing caused a loss of formatting for the code. Here is a readable repeat:

Local StringVar Array saOLines := Split(CustomerStatus_WONOTE, Chr(10));
Local Stringvar Lines_with_Status := "";
local numbervar i;
local stringvar delimiter := "";
For i := 1 to UBound(saOlines) do
(
IF instr(saOlines[i], "status") > 0 Then
Lines_with_Status := Lines_with_Status + delimiter + saOlines[i];
delimiter := Chr(10);
);
Lines_with_Status;