Weekend challenge
Geoff Canyon
gcanyon at gmail.com
Mon Jul 1 01:53:02 EDT 2013
Okay, this is a beast, and in no way good or generalized. It doesn't use
the previous function, instead just going through line by line and flagging
all the issues it sees in one pass. It should:
1. Flag any new ID that doesn't have just two items on the line.
2. Following that line, flag if the next line doesn't have just 3 items
3. Flag any line that doesn't have an ID
4. Flag any line that doesn't have a section.
5. Flag any line where the ID is a duplicate of any previous section,
subsection or type.
6. Flag any line where the section is a duplicate of any previous id,
subsection or type.
7. Flag any line where the subsection is a duplicate of any previous id, or
section
8, Flag any line where the subsection is a duplicate of a previous type
that was under a different subsection
9. Flag any line where the subsection is empty, unless it's line 1 or 2 of
a new ID
10. Flag any line where the type is a duplicate of any previous id or
section
11. Flag any line where the type is a duplicate of any previous subsection,
unless that is the current subsection.
12. Flag any line where the type is a duplicate of any previous type.
13. Flag any line where the type is empty, unless it is line 1 or 2 of a
new ID
14. Flag any line where OP1 or OP2 is not one of the allowed values, or
they are the same.
I might be missing some, but I think that's it.
If you choose to use this feel free to check in with me with any questions.
In the words of Gene Wilder, "It's alive! But watch for page breaks."
function validateList aList
put 0 into lineNumber
put "DIV,1 MULT,1 PLUS,1 MINUS,1 COUNT,1" into OP
split OP using space and comma
repeat for each line L in aList
add 1 to lineNumber
put empty into lineError
put L into W
split W using tab
-- Check to see if this should be the second line of an ID with three
items
if W[1] is empty then
put " -- ID missing" & cr after lineError
else
if W[1] is lastID then
put false into newID
else
if itemList[1][W[1]] is not empty then put " -- ID out of
order" & cr after lineError
if W[3] is not empty or W[4] is not empty then put " -- FIrst
line of ID has wrong item count" & cr after lineError
put 1 into itemList[1][W[1]]
if itemList[2][W[1]] + itemList[3][W[1]] + itemList[4][W[1]] >
0 then put " -- ID is a duplicate" & cr after lineError
put true into newID
put W[1] into lastID
end if
end if
if W[2] is empty then
put " -- Section missing" & cr after lineError
else
if W[2] is not lastSection and itemList[2][W[2]] is not empty then
put " -- Section out of order" & cr after lineError
put 1 into itemList[2][W[2]]
if itemList[1][W[2]] + itemList[3][W[2]] + itemList[4][W[2]] > 0
then put " -- Section is a duplicate" & cr after lineError
put W[2] into lastSection
end if
if newID and W[3] is empty and W[4] is empty then
put true into newSection
next repeat
end if
if W[3] is empty then
put " -- Subsection missing" & cr after lineError
else
if W[3] is not lastSubsection and itemList[3][W[3]] is not empty
then put " -- Subsection out of order" & cr after lineError
put 1 into itemList[3][W[3]]
if itemList[1][W[3]] + itemList[2][W[3]] + itemList[5][W[3]] > 0
then put " -- Subsection is a duplicate" & cr after lineError
put W[3] into lastSubsection
end if
if newSection then
put false into newSection
if W[4] is empty then next repeat
put " -- Second line of new ID has wrong item count" & cr after
lineError
end if
split W[4] using "|"
if W[4][1] is empty then
put " -- Type missing" & cr after lineError
else
if W[4][1] is not lastType and itemList[4][W[4][1]] is not empty
then put " -- Type out of order" & cr after lineError
if (W[4][1] is not W[3] and itemList[3][W[4][1]] is not empty) or
itemList[1][W[4][1]] + itemList[2][W[4][1]] + itemList[4][W[4][1]] > 0 then
put " -- Type is a duplicate" & cr after lineError
put 1 into itemList[4][W[4][1]]
if W[4][1] is not W[3] then put 1 into itemList[5][W[4][1]]
put W[4][1] into lastType
end if
if OP[W[4][2]] is empty then put " -- OP1 is empty" & cr after
lineError
if OP[W[4][3]] is empty then put " -- OP2 is empty" & cr after
lineError
if W[4][2] = W[4][3] then put " -- OP values are the same" & cr after
lineError
if lineError is not empty then put lineNumber && L & cr & lineError &
cr after R
end repeat
return R
end validateList
More information about the use-livecode
mailing list