def process_file(fname, schemafile): table = None for line in open(fname): if not table: m = title_re.search(line) if m: table = Table(name=m.group(1)) if table and not table.version: m = version_re.search(line) if m: table.version = m.group(1) m = variable_re.search(line) if m: v = Variable() (position, name, desc, vtype, column) = m.group(1, 2, 3, 4, 5) oname = name count = 2 while name in [v.name for v in table.vars]: name = "{}{}".format(oname, count) count += 1 v.define_from_row([position, name, desc, vtype]) if "-" in column: v.column = [int(x) for x in column.split("-")] table.add_variable(v) schemafile.write('#define SPEC_FILE "{}"\n'.format(fname)) table.write_sql_scanner(schemafile)
def load_table_schema_from_census_txt_spec(self, *, filename, prefix=""): """Read a single table from a txt file.""" table = None for (ll, line) in enumerate(dopen(filename), 1): if ll > self.MAXLINES: if (table == None) or len(table.vars()) == 0: logging.info( "{} is not a Census text specification".format( filename)) return None # Get a table name if we do not have one if not table: m = TXT_TITLE_RE.search(line) if m: table = Table(name=m.group(1)) table.add_comment("Parsed from {}".format(filename)) continue # Get the table version if we do not have one if table and not table.version: m = TXT_VERSION_RE.search(line) if m: table.version = m.group(1) continue # Is this a variable name within the table? m = VARIABLE_RE.search(line) if m: (position, name, desc, vtype, column) = m.group(1, 2, 3, 4, 5) oname = name count = 2 v = Variable(position=row[0], name=row[1], desc=row[2], vtype=row[3]) while name in [v.name for v in table.vars()]: name = "{}{}".format(oname, count) count += 1 if "-" in column: v.column = [int(x) for x in column.split("-")] table.add_variable(v) if len(table.vars()) == 0: return None self.add_table(table)