In comparison operations, literal character strings technically need only be
enclosed in double quotation marks if they have another meaning which might
be misinterpreted by InData. Here is an example where the literal character
string must be surrounded by double quotation marks:
«fields first, last, title¶
«if first is "last"» …
With the quotation marks, the statement compares the value in the field first
with the character string 
last
; without the quotation marks, it would compare the
value in the field 
first
with the value in the field 
last
if there is a field named 
last
,
and otherwise, it would compare it with the literal character string 
last
Despite InData’s flexibility, however, it is good practice to get into the habit of
quoting literal character strings in prototype statements. In this way, any future
modifications to the data file structure, or to InData, will not break your existing
templates.
Either two sets of straight quotation marks or opening and closing quotation
marks may be used to delimit character strings, as in these examples:
«if a = "something"»
«if a = “something”»
«if a = "She said “Hi there!” to him."»
«if a = “She said "Hi there!" to him.”»
The final two examples illustrate the method for including quotation marks with-
in quoted character strings.
The two types of quotation marks may not be intermixed as string delimiters,
however. Thus, the following prototype statement is illegal:
«if a = "Oooopps! Do not do this”» 
Incorrect use of quotes
Some Example Conditional Prototype Statements
The prototype below contains examples of many of these operators:
«fields last, first, acctnum, balance, last_dep, aux_acct¶
«last», «first»
Primary Account: «acctnum»¶
«if aux_acct»Aux. Account:  «aux_acct»¶
«endif»«if last_dep > 0»Last Deposit:  $«last_dep»¶
«endif»«if balance < 0»*** Overdrawn ***
«else if balance = 0»Zero Balance¶
«else»Balance:  $«balance»¶
«endif¶
«if acctnum contains “999”»Gold Circle Account
«endif»¶
Conditional Data Importing
Constructing Conditions
InData User’s Guide
89
Pdf compression settings - Compress reduce PDF size in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
C# Code & .NET API to Compress & Decompress PDF Document
adjust pdf size preview; change font size pdf fillable form
Pdf compression settings - VB.NET PDF File Compress Library: Compress reduce PDF size in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET PDF Document Compression and Decompression Control SDK
change font size in pdf text box; change font size pdf text box
The first 
if
statement, in line 4, merely tests whether the 
aux_acct
field is empty
or not; if it isn’t, then its contents are inserted into the formatted record after a
prefix. This if statement’s corresponding 
endif
appears on line 5 so that the para-
graph mark following the 
aux_acct
field is also conditionally inserted.
Similarly, the literal text 
Last Deposit:  $
, the contents of the 
last_dep
field, and a
carriage return are all included only if the value in the 
last_dep
field is greater
than zero, and the final line of a record will be 
Gold Circle Account
whenever the
string 
999
appears anywhere within the 
acctnum
field.
Here are some sample typeset records:
Smith, John
Primary Account: 123-87-2
Last Deposit: $100
Balance: $256.92
Smith, Kevin
Primary Account: 142-22-9
*** Overdrawn ***
Smith, Larry
Primary Account: 999-23-7
Aux. Account: 187-22-9
Last Deposit: $2102.87
Balance: $15934.85
Gold Circle Account
if…else Chains
The preceding prototype also contained a more complicated example of an if
statement than we’ve seen so far:
… «if balance < 0»*** Overdrawn ***
«else if balance = 0»Zero Balance¶
«else»Balance:  $«balance»¶
«endif¶
This 
if
statement uses an 
elseif
statementas its second clause rather than just a
simple else, forming a chain of three choices depending on the value in the 
bal-
ance
field. The initial 
if
tests whether the value in the balance field is less than
zero. If so, the string 
*** Overdrawn ***
is included in the record. Otherwise, it next
tests whether it is equal to zero. If so, the string 
Zero Balance
is included; it not,
the final 
else
clause is taken, and its accompanying string 
(Balance:  $)
and the
value in the 
balance
field are included.
If—else if—else—endif
chains of any length such as this one may be used to con-
struct prototype statements where different actions take place depending on
which of several possible values a field (or expression) has; this type of program-
Constructing Conditions
Chapter 6:
90
InData User’s Guide
C# PDF Convert to Tiff SDK: Convert PDF to tiff images in C#.net
The magnification of the original PDF page size. compression, The target compression of the output tiff file to DOCX/TIFF with specified settings through options
optimize scanned pdf; pdf form change font size
C# Create PDF from Tiff Library to convert tif images to PDF in C#
compression, The target compression of the output tiff file, it is invalid for pdf Description: Convert to PDF/TIFF with specified settings through options
best way to compress pdf files; adjust file size of pdf
ming statement is known as a caseconstruction. One use of it is to include the
first non-empty field in a series of fields. For example, the following prototype will
include the first non-empty field (if any) among the first five in each formatted
record:
«if a»«a»«else if b»«b»«else if c»«c»«else if d»«d»«else if e»«e»«endif»
As these two examples have illustrated, only one final 
endif
statement is neces-
sary for the entire 
if—else if 
chain.
A more complicated example of a case conditional structure is found in the 
Mail
Merge
document in the InData 
Samples/Mail Merge 
sub-folder. In this case, an 
if—
else if 
chain is used to treat incoming data records very differently based upon the
value found in some particular field. Here is the heart of the prototype (we’ve
highlighted the conditional statements):
«if key=1» I am pleased to inform you that your work has been judged outstanding by
all concerned. Congratulations on a job well done.«else if key=2» I am pleased to inform
you that your work has been judged above average. All of us at Poole thank you for your
efforts.«else if  key=3» I regret to inform you that your work at the present time does not
fully meet the level required for the position you hold.«else» Your work at this time has
been found to be satisfactory.«endif»
At the present time, you will continue in your position as «itemb».«if key=1»However,
as a result of your superior performance, you will be promoted one grade within that posi-
tion, with the associated increase in salary in addition to the company-wide 1.5% cost of
living increase.«else if key=2» In recognition of your performance, you will receive a 3%
salary increase in addition to the company-wide cost of living increase of 1.5%.«else»
This year, you will receive a salary increase of 1.5%, corresponding to the company-wide
cost of living adjustment.«endif»
This prototype is part of a longer one which produces evaluation form letters for
employees of the Poole Corporation. Based on the value in the field named 
key
,
radically different letters result. Values of 
1
denote employees who are receiving
the most favorable evaluation, values of 
2
indicate a better than average perfor-
mance review, values of 
3
indicate a substandard evaluation, and all other values
are interpreted as satisfactory. In the second paragraph of the prototype, only the
key
values 
1
and 
2
are treated in a special way.
The greeting line of each letter also uses a conditional statement to address recip-
ients with 
key
field values of 
1
by their first name (probably a faux pas):
Dear «if key<>1»«title» «last»:«else»«first»,«endif»
Note that in this case the final paragraph mark is notconditionally imported,
since we want a new paragraph to begin after the greeting in either case.
Conditional Data Importing
Constructing Conditions
InData User’s Guide
91
C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF
compression, The target compression of the output tiff file, it is invalid for pdf Description: Convert to PDF/TIFF with specified settings through options
pdf markup text size; reader shrink pdf
C# Create PDF from Excel Library to convert xlsx, xls to PDF in C#
compression, The target compression of the output tiff file, it is invalid for pdf Description: Convert to PDF/TIFF with specified settings through options
pdf font size change; adjusting page size in pdf
Alternate Forms of the if Statement
There are other, shorter versions of the if statementkeywords:
COMPONENT
ALTERNATEFORMS
if
[
else
|
endif
],fi, end if
Thus, all of the following 
if
statements are equivalent if 
last
is a field name:
«if last is not empty»«last»«else»«first»«endif»
«[ last <> “”»«last»«|»«first»«]»
«[ last»«last»«|»«first»«]»
In addition, the keyword 
then
may appear before the closing right chevron mark
in the 
if
statement if desired:
«if last is empty then»«first»«endif»
The 
then
keyword performs no function, but some people feel that it makes 
if
statements more readable. (There is no abbreviation for 
then
since it’s only pre-
sent for readability.)
Forming Compound Conditions
More complex conditions—boolean expressions—and 
if
statements are possible
than those we have considered so far. InData provides two logical connectivesand
a negation operator for constructing compound  conditions:
and
Joins two conditions into a compound (boolean) expression that is true
only if both component conditions are true;
or
Joins two conditions into a compound (boolean) expression that is true if
either or both component conditions are true.
not
Inverts the value of the following logical expression.
For example, the following 
if
statement will place the contents of the 
balance
field
into the formatted data only when its value is greater than zero and less than
or equal to 10,000:
«if balance > 0 and balance <= 10000»«balance»«endif¶
The 
not
operator reverses the logical sense of the expression that it modifies. For
example, the following 
if
statement inserts the contents of the 
fzip
field when the
contents of the 
country
field is something other than 
USA
or 
Canada
and when the
zip
field is empty:
Constructing Conditions
Chapter 6:
92
InData User’s Guide
C# Create PDF from Word Library to convert docx, doc to PDF in C#.
compression, The target compression of the output tiff file, it is invalid for pdf Description: Convert to PDF/TIFF with specified settings through options
advanced pdf compressor; change page size of pdf document
C# PDF Convert to Word SDK: Convert PDF to Word library in C#.net
The magnification of the original PDF page size. compression, The target compression of the output tiff file to DOCX/TIFF with specified settings through options
batch reduce pdf file size; change paper size in pdf document
«[ not (country="USA" or country="Canada") and zip=""»«fzip»«]»
Use Parenthesesfor Grouping
As was illustrated in the preceding example, in compound conditions involving
more than two conditions, parentheses should be used to indicate the order of
evaluation. For example, the following 
if
statement will include the 
acctnum
and
balance
fields in the formatted data (separated by a colon and a space) if the value
in field 
balance
is less than zero and the value in field 
closed
is zero or if the value
in 
balance
is greater than zero and the value in 
closed
is one: 
«if (balance < 0 and closed = 0) or (balance > 0 and closed = 1)» «acctnum»: «bal-
ance»«endif¶
You will get different results when you evaluate the expression grouped in this
way than you would with other ways of grouping it. Always use parentheses to
avoid ambiguity in complex conditions, particularly since InData groups things
in non-standardly, in many cases.
Arithmetic Operators
InData prototypes also support the following arithmetic operatorswithin proto-
type expressions:
+
Addition
-
Subtraction and negation: for example, if the current contents of field 
a
is 5, then 
a+3
is 8 and 
-a
is -5.
*
Multiplication
/
Division
mod
Modulus(remainderafter division): for example, 23 mod 5is 3.
Care needs to be taken with both the 
/
and 
mod
operators to avoid division by zero
which will produce a fatal error.
Nested ifStatements
Nested 
if
constructions are also possible in InData prototypes. Consider this
example taken from the detective directory prototype found in the InData 
Sam-
ples
folder:
«if app<>empty»Appointed: «app». «if other» Other positions held:
«other»«endif»¶
«endif¶
This construction differs from the
if—else if—endif
form we looked at earlier,
where the first 
if
statement in the chain whose condition is true is the one that
determines how the record gets formatted. In this case, the second, nested 
if
state-
ment is entirelydependent on the first one; if 
app
is empty, the value in 
other
will
never be tested, and 
other
will never be inserted into the formatted records. That
is why there are two 
endif
statements: one to close each 
if
statement. The para-
Conditional Data Importing
Constructing Conditions
InData User’s Guide
93
C# Create PDF from CSV to convert csv files to PDF in C#.net, ASP.
compression, The target compression of the output tiff file, it is invalid for pdf Description: Convert to PDF/TIFF with specified settings through options
change font size in pdf fillable form; pdf page size
C# Create PDF from OpenOffice to convert odt, odp files to PDF in
compression, The target compression of the output tiff file, it is invalid for pdf Description: Convert to PDF/TIFF with specified settings through options
change font size in pdf; pdf file compression
graph mark comes between the two of them, making it conditional upon the outer
if
statement—and hence on the value in 
app
—and independent of the value in
other
.
Comparing with the Previous or Next Record
InData allows you to use the 
if
statement to comparethe contents of any field in
the current record with any data from the previous or next data record. The 
pre-
vious
keyword—which may be abbreviated as 
prev
—preceding a field name indi-
cates that the data is to be taken from the preceding record. Similarly, the 
next
keywordindicates that the data is to be taken from the folowing record in the
data stream.
For example, the following prototype prints a header record each time the 
dept
field’s value changes in a data file:
«if dept <> prev dept»
«dept»
«endif»«last», «first»
«ext»¶
The following prototype places a rule and some additional space after the current
record whenever the value in the 
group_code
field is about to change in the next
record:
«if group_code <> next group_code¶
«product_code»
$«price»¶
«else¶
«product_code»
$«price»¶
«endif¶
For the first imported record, all fields in the previous record are empty. Thus, the
conditions 
prev dept is empty
and 
dept is not prev dept
(assuming 
dept
is always
non-empty) will be true when processing the first record with the preceding pro-
totype.
Similarly, at the end of the data, all fields in the next record are empty. Thus, the
conditions 
next dept is empty
and 
dept is not next dept
(under the same assumption
as above) will be true for the final record.
Avoiding Unwanted Blank Lines and Empty Text Boxes
We’ve already considered methods for avoiding unwanted blank lineswithin the
formatted records: making the paragraph mark following the conditionally
imported data part of the condition rather than literal text, as in these examples:
«if a»«a»¶
«if a»¶
«endif»«if b»«b»¶
«a»«endif»«if b»¶
«endif»«if c»«c»¶
«b»«endif»«if c»¶
Constructing Conditions
Chapter 6:
94
InData User’s Guide
C# Create PDF from RTF to convert csv files to PDF in C#.net, ASP.
compression, The target compression of the output tiff file, it is invalid for pdf Description: Convert to PDF/TIFF with specified settings through options
pdf optimized format; change font size pdf
«endif¶
«c»«endif¶
In the left example, all three fields are conditionally imported, and each one that
is imported is placed into its own paragraph which terminates after the data is
imported.
The right example is somewhat different. In this case, all three fields are again
conditionally imported and placed within their own paragraph. However, each
preceding paragraph is terminated when a non-empty field is found. For exam-
ple, if field 
a
has data in it, the prototype will first output a paragraph mark, clos-
ing the precedingparagraph, and then the data in field 
a
Thus, in the first approach, each field is responsible for terminating its own para-
graph. In contrast, in the second case, each field is responsible for closing the pre-
vious paragraph before beginning its own. Which approach to use depends on the
effects you want to achieve in your final document.
Suppose you wanted a single empty paragraph between imported records. Con-
sider these two prototypes:
«if a»«a»¶
«if a»«a»¶
«endif»«if b»«b»¶
«endif»«if b»«b»¶
«endif»«if c»«c»¶
«endif»«if c»«c»¶
«endif»¶
«endif»«if a<>"" and b<>"" and c<>""»¶
«endif¶
The prototype on the left will always place a new paragraph into the document
after each data record is imported, via the final paragraph mark following the
endif
. This means that all non-empty data records will be separated by blank
paragraphs, and an entirely empty data record will also produce an (additional)
blank line.
In contrast, the prototype on the right explicitly handles the case of an empty
record, placing a blank paragraph only when no field has been imported for that
record. In this case, consecutive empty records will not produce multiple empty
paragraphs.
Next box and next column characters can also be imported conditionally. For
example, compare these two prototypes:
«name»¶
«name»¶
«if a2»«a2»¶
«if a2»«a2»¶
«endif»«if a3»«a3»¶
«endif»«if a3»«a3»¶
«endif»«ci», «st»  «zp»
«endif»«ci», «st»  «zp»«if next name<>""»
«endif¶
In the left prototype, every record ends with a new box character. This will result
in an empty box after the final imported record. In the right example, the next
box character is placed only when the next record’s 
name
field contains data, sup-
Conditional Data Importing
Comparing with the Previous or Next Record
InData User’s Guide
95
pressing the unnecessary new box character (and a possible empty last page)
after the final imported record.
Finally, here is an even more complicated prototype which handles the case of
possible blank records within the incoming data:
«if name is empty»«next»«endif¶
«name»¶
«if a2»«a2»¶
«endif»«if a3»«a3»¶
«endif»«ci», «st»  «zp»«if next name<>""»
«endif¶
This prototype assumes that an empty 
name
field indicates a blank or invalid
record that ought to be skipped. The 
next
prototype statement—note that it is
enclosed in chevron marks—tells InData to go on to the next data record, begin-
ning processing at the start of the prototype. Thus, the next box character will be
placed into the document only when a valid record is followed by another valid
record. Be careful not to confuse the 
next
statement with the 
next
field modifier
or the 
nextrepeat
statement (to be discussed later in this chapter).
Doing Something Every n
th
Record
Conditional statements may also be used to perform some operation to or after
every n
th
imported record. For example, the following prototype creates a sim-
ple features chart, shading every other line:
«if recordnumber(true) mod 2 = 1¶
«a»
«[b="x"»•«]»«[b="n"»n/a«]»
«[c="x"»•«]»«[c="q"»?«]» «[d="x"»•«]»«[d="n"»n/a«]»¶
«else»«a» «[b="x"»•«]»«[b="n"»n/a«]»
«[c="x"»•«]»«[c="q"»?«]» «[d="x"»•«]»«[d="n"»n/a«]»¶
«endif¶
The basic importing statements are repeated twice within the prototype: once
in a paragraph with a grey rule behind it and again in an unruled paragraph. The
first field in each record is imported as is. The remaining three records are trans-
lated into symbols based on their contents.
Which section of the prototype is used to import a given data record is controlled
by the
«if recordnumber(true) mod 2 = 1»
statement, where 
mod
is the modulus
operator (remainder after division) and the 
recordnumber(true)
function returns
the position within the import stream of the current record. Thus, the condition
is true for odd numbered records and false for even numbered records.
Here is the resulting table, along with its preceding header line:
»
»
»
»
»
»
Comparing with the Previous or Next Record
Chapter 6:
96
InData User’s Guide
SPECIES
EXT
SKULL
TELEPATHS
WARRIORS
Centauri
Human
Mimbari
Narn
Vorlon
n/a
?
If you wanted to shade every fifth line, you would use the statement:
«if recordnumber(true) mod 5 = 1»
whose condition would be true for the first, sixth and eleventh records and so on.
If you wanted to shade every fifth line starting with line five, then the condition
to use is
«if recordnumber(true) mod 5 = 0»
If you wanted to shade every third line starting with line two, then the condition
to use is: 
«if recordnumber(true) mod 3 = 2»
If you wanted to shade every third line skipping the first eight lines, then the con-
dition to use is: 
«if recordnumber(true) mod 3 = 0 and recordnumber(true) > 8»
Finally, if you wanted to shade line five and every third line thereafter, then the
condition to use is: 
«if (recordnumber(true) Ž 5 and ((recordnumber(true) - 5) mod 3 = 0)»
Adding extra space every n
th
line (or performing some other action) is handled in
a similar manner, as in this example which places a blank line after every twen-
tieth line:
«partnum»
«descr»
$«price».
95
«if recordnumber(true) mod 20 = 0»¶
«endif¶
Methods for doing something every n
th
imported record when you are condition-
ally importing entire records are discussed in Chapter 10.
»
»
Conditional Data Importing
Doing Something Every N
th
Record
InData User’s Guide
97
Finally, let’s examine another version of the features table:
SPECIES
EXT
SKULL
TELEPATHS
WARRIORS
Centauri
|
|
n
|
n
Human
|
|
n
|
n
Mimbari
|
n
|
n
|
n
Narn
|
|
|
n
Vorlon
|
N/A
|
|
n
Here is the prototype that created it:
SPECIES
EXT
SKULL
TELEPATHS
WARRIORS
..
«a» «if next a»
|
«else»
|
«]» «[b="x"»
n
«]» «if next 
|
«else»
|
«]» «[c="x"»
n
«]»«[c="q"»
«]» «if next 
|
«else»
|
«]» «[d="x"»
n
«]»«[d="n"»N/A«]»¶
It is similar to the one used before, although the symbols have changed. Notice
that the vertical lines in the formatted table are created using vertical bar char-
acters which have been vertically scaled and baseline shifted. Both the vertical
rules and the data are positioned using center tab stops, and each paragraph has
a  horizontal ruleunderneath it. (We’ve increased the leading here to make the
prototype easier to read.)
Here is this part of the prototype that created the vertical rules in a more read-
able form:
«if next a»
|
«else»
|
«]»
The first bar is 10 point Helvetica type, vertically scaled by 270% and having a
baseline shift setting of -2.5pt. This bar will be used in all but the final line of the
table, where a somewhat shorter bar is needed to avoid crossing the final hori-
zontal rule (220% vertical scale and a baseline shift of +1.5pt).
This technique requires a fair amount of trial and error to get things to look right,
but the final result can be quite pleasing. You can use larger or smaller point sizes
of Helvetica type to produce thicker or thinner vertical lines. In some cases, reduc-
ing the leading in the relevant paragraphs will also help in positioning the ver-
tical bar characters to create vertical rules.
The 
Features
document in the 
Samples
folder uses some of the techniques we’ve
discussed in this subsection for a significantly larger sample features chart. We
recommend examining it if you plan to use InData in a similar way.
»
»
»
»
»
»
Doing Something Every N
th
Record
Chapter 6:
98
InData User’s Guide
Documents you may be interested
Documents you may be interested