private int GetMaxLength(ILAttribute attr) { switch (attr.CDataType) { case CoreDataType.DATE: return(10); case CoreDataType.DATETIME: return(20); case CoreDataType.DECIMAL: return(attr.Length); case CoreDataType.VARCHAR: return(attr.Length); case CoreDataType.INT: return(11); // 10 + Minus } return(0); }
/// /// Generierung eines einzelnen Cases (zu ParserState) /// private string GenerateParseAttributeCase(ILInterface ifa, ILAttribute attr) { string code = ""; code += $"case {ifa.ShortName}ParserState.IN_{attr.Name.ToUpper()}:\n"; /// Vor Anführungszeichen code += $" if(substate == {ifa.ShortName}ParserSubstate.INITIAL) {{\n"; code += " if(c == '\"') {\n"; code += $" substate = {ifa.ShortName}ParserSubstate.IN_STRING;\n"; code += " } else if(c == ';') {\n"; // Zum nächsten Attribut weiterschalten if (attr == ifa.NonCalculatedAttributes.Last()) { code += $" state = {ifa.ShortName}ParserState.FINAL;\n"; } else { var nextAttr = ifa.NonCalculatedAttributes[ifa.NonCalculatedAttributes.IndexOf(attr) + 1]; code += $" state = {ifa.ShortName}ParserState.IN_{nextAttr.Name.ToUpper()};\n"; } code += " } else {\n"; code += $" throw new InvalidDataException($\"Ungültiges Zeichen vor {ifa.Name}.{attr.Name} Zeile {{i}}\");\n"; code += " }\n"; /// Nach Anführungszeichen code += $" }} else if(substate == {ifa.ShortName}ParserSubstate.IN_STRING) {{\n"; code += " if(c == '\"') {\n"; code += $" content.{attr.Name} = buf;\n"; code += " buf = \"\";\n"; code += $" substate = {ifa.ShortName}ParserSubstate.INITIAL;\n"; if (attr == ifa.NonCalculatedAttributes.Last()) { code += $" state = {ifa.ShortName}ParserState.FINAL;\n"; } code += " } else {\n"; code += " buf += c;\n"; code += " }\n"; code += " }\n"; code += $" break;\n"; return(code.Indent(" ")); }
private string GetSubstringIfNeeded(ILAttribute attr, ILInterface ifa) { return($".Substring(0, {GetMaxLength(attr)})"); }