def validate( err_count=0 )
location = "DE #{parent.name}/#{@name}"
if empty?
if required?
warn "#{location}: Empty though mandatory!"
err_count += 1
end
else
if (pos = (value =~ root.illegal_charset_pattern))
warn "#{location}: Illegal character: #{value[pos].chr}"
err_count += 1
end
if @format =~ /^(a|n|an)(..)?(\d+)$/
_a_n_an, _upto, _size = $1, $2, $3
case _a_n_an
when 'n'
strval = value.to_s
re = Regexp.new('^(-)?(\d+)([.,]\d+)?$')
md = re.match strval
if md.nil?
raise "#{location}: '#{strval}' - not matching format #@format"
end
len = strval.length
len -= 1 if md[1]=='-'
len -= 1 if not md[3].nil?
break if not required? and len == 0
if len > _size.to_i
warn "Context in #{location}: #{_a_n_an}, #{_upto}, #{_size}; #{md[1]}, #{md[2]}, #{md[3]}"
warn "Length # mismatch in #{location}: #{len} vs. #{_size}"
err_count += 1
end
if md[1] =~/^0+/
warn "#{strval} contains leading zeroes"
err_count += 1
end
if md[3] and md[3]=~ /.0+$/
warn "#{strval} contains trailing decimal sign/zeroes"
err_count += 1
end
when 'a', 'an'
len = value.to_s.length
if _upto.nil? and len != $3.to_i or len > $3.to_i
warn "Length mismatch in #{location}: #{len} vs. #{_size}"
err_count += 1
end
else
raise "#{location}: Illegal format prefix #{_a_n_an}"
end
else
warn "#{location}: Illegal format: #{@format}!"
err_count += 1
end
end
err_count
end